Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 206754
b: refs/heads/master
c: a9fc031
h: refs/heads/master
v: v3
  • Loading branch information
Alexey Starikovskiy authored and Len Brown committed Jul 7, 2010
1 parent acf22d8 commit 1d25bf8
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 20d33aea7ae7ad858f3f91c834d9043cd8122d38
refs/heads/master: a9fc03125ea0001ff18bc29da9539b587fdbd1d7
18 changes: 16 additions & 2 deletions trunk/drivers/acpi/acpica/dsmethod.c
Original file line number Diff line number Diff line change
Expand Up @@ -584,8 +584,22 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
* want make the objects permanent.
*/
if (!(method_desc->method.flags & AOPOBJ_MODULE_LEVEL)) {
acpi_ns_delete_namespace_by_owner(method_desc->method.
owner_id);

/* Delete any direct children of (created by) this method */

acpi_ns_delete_namespace_subtree(walk_state->
method_node);

/*
* Delete any objects that were created by this method
* elsewhere in the namespace (if any were created).
*/
if (method_desc->method.
flags & AOPOBJ_MODIFIED_NAMESPACE) {
acpi_ns_delete_namespace_by_owner(method_desc->
method.
owner_id);
}
}
}

Expand Down
20 changes: 16 additions & 4 deletions trunk/drivers/acpi/acpica/nsalloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,12 +219,24 @@ void acpi_ns_install_node(struct acpi_walk_state *walk_state, struct acpi_namesp

ACPI_FUNCTION_TRACE(ns_install_node);

/*
* Get the owner ID from the Walk state. The owner ID is used to track
* table deletion and deletion of objects created by methods.
*/
if (walk_state) {
/*
* Get the owner ID from the Walk state. The owner ID is used to
* track table deletion and deletion of objects created by methods.
*/
owner_id = walk_state->owner_id;

if ((walk_state->method_desc) &&
(parent_node != walk_state->method_node)) {
/*
* A method is creating a new node that is not a child of the
* method (it is non-local). Mark the executing method as having
* modified the namespace. This is used for cleanup when the
* method exits.
*/
walk_state->method_desc->method.flags |=
AOPOBJ_MODIFIED_NAMESPACE;
}
}

/* Link the new entry into the parent and existing children */
Expand Down

0 comments on commit 1d25bf8

Please sign in to comment.