diff options
Diffstat (limited to 'dispatcher/dsmethod.c')
-rw-r--r-- | dispatcher/dsmethod.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/dispatcher/dsmethod.c b/dispatcher/dsmethod.c index d4127fd..1766fc3 100644 --- a/dispatcher/dsmethod.c +++ b/dispatcher/dsmethod.c @@ -693,10 +693,15 @@ AcpiDsTerminateControlMethod ( } /* - * Delete any namespace objects created anywhere within - * the namespace by the execution of this method + * Delete any namespace objects created anywhere within the + * namespace by the execution of this method. Unless this method + * is a module-level executable code method, in which case we + * want make the objects permanent. */ - AcpiNsDeleteNamespaceByOwner (MethodDesc->Method.OwnerId); + if (!(MethodDesc->Method.Flags & AOPOBJ_MODULE_LEVEL)) + { + AcpiNsDeleteNamespaceByOwner (MethodDesc->Method.OwnerId); + } } /* Decrement the thread count on the method */ @@ -745,7 +750,10 @@ AcpiDsTerminateControlMethod ( /* No more threads, we can free the OwnerId */ - AcpiUtReleaseOwnerId (&MethodDesc->Method.OwnerId); + if (!(MethodDesc->Method.Flags & AOPOBJ_MODULE_LEVEL)) + { + AcpiUtReleaseOwnerId (&MethodDesc->Method.OwnerId); + } } return_VOID; |