[PATCH] acpica: fwts_acpica.c: Override ACPICA Semaphores to fix memory leak bug
Colin King
colin.king at canonical.com
Wed May 16 09:03:48 UTC 2012
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.
--
1.7.10
More information about the fwts-devel
mailing list