Skip to content

Commit

Permalink
ACPICA: Fix reference count issues for DdbHandle object
Browse files Browse the repository at this point in the history
Fix a problem where the DdbHandle could be prematurely deleted,
possibly causing a fault.

Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
Lin Ming authored and Len Brown committed May 27, 2009
1 parent 8c725bf commit 06366c1
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions drivers/acpi/acpica/exconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,8 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
walk_state);
if (ACPI_FAILURE(status)) {
(void)acpi_ex_unload_table(ddb_handle);

acpi_ut_remove_reference(ddb_handle);
return_ACPI_STATUS(status);
}
}
Expand Down Expand Up @@ -454,6 +456,10 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
return_ACPI_STATUS(status);
}

/* Remove the reference by added by acpi_ex_store above */

acpi_ut_remove_reference(ddb_handle);

/* Invoke table handler if present */

if (acpi_gbl_table_handler) {
Expand Down Expand Up @@ -530,8 +536,5 @@ acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle)
(void)acpi_tb_release_owner_id(table_index);
acpi_tb_set_table_loaded_flag(table_index, FALSE);

/* Table unloaded, remove a reference to the ddb_handle object */

acpi_ut_remove_reference(ddb_handle);
return_ACPI_STATUS(AE_OK);
}

0 comments on commit 06366c1

Please sign in to comment.