[PATCH] acpica: fwts_acpica.c: Override ACPICA Semaphores to fix memory leak bug

IvanHu ivan.hu at canonical.com
Tue May 22 03:26:12 UTC 2012


On 05/16/2012 05:03 PM, Colin King wrote:
> From: Colin Ian King<colin.king at canonical.com>
>
> The ACPICA Semaphore deletion does not free the allocated semaphore so
> we re-implement the creation and deletion for fwts to fix this ACPICA core
> bug.
>
> Signed-off-by: Colin Ian King<colin.king at canonical.com>
> ---
>   src/acpica/Makefile.am   |    2 ++
>   src/acpica/fwts_acpica.c |   47 ++++++++++++++++++++++++++++++++++++++++++++++
>   2 files changed, 49 insertions(+)
>
> diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
> index 5a475e9..7d1249c 100644
> --- a/src/acpica/Makefile.am
> +++ b/src/acpica/Makefile.am
> @@ -20,6 +20,8 @@ osunixxf_munged.c: $(ACPICA_OSL)/osunixxf.c
>   	sed 's/^AcpiOsReadPciConfiguration/__AcpiOsReadPciConfiguration/' | \
>   	sed 's/^AcpiOsSignalSemaphore/__AcpiOsSignalSemaphore/' | \
>   	sed 's/^AcpiOsWaitSemaphore/__AcpiOsWaitSemaphore/' | \
> +	sed 's/^AcpiOsCreateSemaphore/__AcpiOsCreateSemaphore/' | \
> +	sed 's/^AcpiOsDeleteSemaphore/__AcpiOsDeleteSemaphore/' | \
>   	sed 's/^AcpiOsVprintf/__AcpiOsVprintf/' | \
>   	sed 's/^AcpiOsSignal/__AcpiOsSignal/' | \
>   	sed 's/^AcpiOsSleep/__AcpiOsSleep/' \
> diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
> index 3dc5ced..b8119cb 100644
> --- a/src/acpica/fwts_acpica.c
> +++ b/src/acpica/fwts_acpica.c
> @@ -485,6 +485,53 @@ void AcpiOsVprintf(const char *fmt, va_list args)
>   }
>
>   /*
> + *  AcpiOsCreateSemaphore()
> + *	Override ACPICA AcpiOsCreateSemaphore
> + */
> +ACPI_STATUS AcpiOsCreateSemaphore(UINT32 MaxUnits,
> +	UINT32 InitialUnits,
> +	ACPI_HANDLE *OutHandle)
> +{
> +	sem_t *sem;
> +
> +	if (!OutHandle)
> +		return AE_BAD_PARAMETER;
> +
> +	sem = AcpiOsAllocate(sizeof(sem_t));
> +	if (!sem)
> +		return AE_NO_MEMORY;
> +
> +	if (sem_init(sem, 0, InitialUnits) == -1) {
> +		AcpiOsFree(sem);
> +		return AE_BAD_PARAMETER;
> +	}
> +
> +	*OutHandle = (ACPI_HANDLE)sem;
> +
> +	return AE_OK;
> +}
> +
> +/*
> + *  AcpiOsDeleteSemaphore()
> + *	Override ACPICA AcpiOsDeleteSemaphore to fix semaphore memory freeing
> + */
> +ACPI_STATUS AcpiOsDeleteSemaphore(ACPI_HANDLE Handle)
> +{
> +	sem_t *sem = (sem_t *)Handle;
> +
> +	if (!sem)
> +		return AE_BAD_PARAMETER;
> +
> +	if (sem_destroy(sem) == -1)
> +		return AE_BAD_PARAMETER;
> +
> +	AcpiOsFree(sem);
> +
> +	return AE_OK;
> +}
> +
> +
> +/*
>    *  AcpiOsWaitSemaphore()
>    *	Override ACPICA AcpiOsWaitSemaphore to keep track of semaphore acquires
>    *	so that we can see if any methods are sloppy in their releases.
Acked-by: Ivan Hu<ivan.hu at canonical.com>




More information about the fwts-devel mailing list