diff --git a/sys/contrib/dev/acpica/components/utilities/utdelete.c b/sys/contrib/dev/acpica/components/utilities/utdelete.c index 77dbe1b..9bb343c 100644 --- a/sys/contrib/dev/acpica/components/utilities/utdelete.c +++ b/sys/contrib/dev/acpica/components/utilities/utdelete.c @@ -415,6 +415,7 @@ AcpiUtUpdateRefCount ( return; } + (void) AcpiUtAcquireMutex (ACPI_MTX_REFCOUNTS); Count = Object->Common.ReferenceCount; NewCount = Count; @@ -424,9 +425,13 @@ AcpiUtUpdateRefCount ( switch (Action) { case REF_INCREMENT: - +#ifdef _KERNEL + if (NewCount == 0) + panic("resurrecting dead object"); +#endif NewCount++; Object->Common.ReferenceCount = NewCount; + (void) AcpiUtReleaseMutex (ACPI_MTX_REFCOUNTS); ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Obj %p Refs=%X, [Incremented]\n", @@ -440,7 +445,9 @@ AcpiUtUpdateRefCount ( ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Obj %p Refs=%X, can't decrement! (Set to 0)\n", Object, NewCount)); - +#ifdef _KERNEL + panic("second death"); +#endif NewCount = 0; } else @@ -459,6 +466,7 @@ AcpiUtUpdateRefCount ( } Object->Common.ReferenceCount = NewCount; + (void) AcpiUtReleaseMutex (ACPI_MTX_REFCOUNTS); if (NewCount == 0) { AcpiUtDeleteInternalObj (Object); @@ -469,15 +477,19 @@ AcpiUtUpdateRefCount ( ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS, "Obj %p Refs=%X, Force delete! (Set to 0)\n", Object, Count)); - +#ifdef _KERNEL + panic("forced death"); +#endif NewCount = 0; Object->Common.ReferenceCount = NewCount; + (void) AcpiUtReleaseMutex (ACPI_MTX_REFCOUNTS); AcpiUtDeleteInternalObj (Object); break; default: ACPI_ERROR ((AE_INFO, "Unknown action (0x%X)", Action)); + (void) AcpiUtReleaseMutex (ACPI_MTX_REFCOUNTS); break; } diff --git a/sys/contrib/dev/acpica/include/aclocal.h b/sys/contrib/dev/acpica/include/aclocal.h index d54455f..47e9f30 100644 --- a/sys/contrib/dev/acpica/include/aclocal.h +++ b/sys/contrib/dev/acpica/include/aclocal.h @@ -89,8 +89,9 @@ union acpi_parse_object; #define ACPI_MTX_MEMORY 5 /* Debug memory tracking lists */ #define ACPI_MTX_DEBUG_CMD_COMPLETE 6 /* AML debugger */ #define ACPI_MTX_DEBUG_CMD_READY 7 /* AML debugger */ +#define ACPI_MTX_REFCOUNTS 8 /* ACPI object reference counts */ -#define ACPI_MAX_MUTEX 7 +#define ACPI_MAX_MUTEX 8 #define ACPI_NUM_MUTEX ACPI_MAX_MUTEX+1