Subversion Repositories Kolibri OS

Rev

Rev 1498 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1498 Rev 2216
Line 6... Line 6...
6
 
6
 
7
/******************************************************************************
7
/******************************************************************************
8
 *
8
 *
9
 * 1. Copyright Notice
9
 * 1. Copyright Notice
10
 *
10
 *
11
 * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp.
11
 * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
12
 * All rights reserved.
12
 * All rights reserved.
13
 *
13
 *
14
 * 2. License
14
 * 2. License
15
 *
15
 *
Line 126... Line 126...
126
#include "acpi.h"
126
#include "acpi.h"
127
#include "accommon.h"
127
#include "accommon.h"
128
#include "acparser.h"
128
#include "acparser.h"
129
#include "acdispat.h"
129
#include "acdispat.h"
130
#include "amlcode.h"
130
#include "amlcode.h"
131
#include "acnamesp.h"
-
 
132
#include "acinterp.h"
131
#include "acinterp.h"
Line 133... Line 132...
133
 
132
 
134
#define _COMPONENT          ACPI_PARSER
133
#define _COMPONENT          ACPI_PARSER
Line 633... Line 632...
633
                WalkState->MethodNode, NULL, Status);
632
                WalkState->MethodNode, NULL, Status);
Line 634... Line 633...
634
 
633
 
Line 635... Line 634...
635
            /* Check for possible multi-thread reentrancy problem */
634
            /* Check for possible multi-thread reentrancy problem */
636
 
635
 
637
            if ((Status == AE_ALREADY_EXISTS) &&
636
            if ((Status == AE_ALREADY_EXISTS) &&
638
                (!WalkState->MethodDesc->Method.Mutex))
-
 
639
            {
-
 
640
                ACPI_INFO ((AE_INFO,
-
 
641
                    "Marking method %4.4s as Serialized because of AE_ALREADY_EXISTS error",
-
 
642
                    WalkState->MethodNode->Name.Ascii));
637
                (!(WalkState->MethodDesc->Method.InfoFlags & ACPI_METHOD_SERIALIZED)))
643
 
638
            {
644
                /*
639
                /*
645
                 * Method tried to create an object twice. The probable cause is
-
 
646
                 * that the method cannot handle reentrancy.
-
 
647
                 *
640
                 * Method is not serialized and tried to create an object
648
                 * The method is marked NotSerialized, but it tried to create
641
                 * twice. The probable cause is that the method cannot
649
                 * a named object, causing the second thread entrance to fail.
-
 
650
                 * Workaround this problem by marking the method permanently
642
                 * handle reentrancy. Mark as "pending serialized" now, and
651
                 * as Serialized.
643
                 * then mark "serialized" when the last thread exits.
652
                 */
644
                 */
653
                WalkState->MethodDesc->Method.MethodFlags |= AML_METHOD_SERIALIZED;
645
                WalkState->MethodDesc->Method.InfoFlags |=
654
                WalkState->MethodDesc->Method.SyncLevel = 0;
646
                    ACPI_METHOD_SERIALIZED_PENDING;
Line 655... Line 647...
655
            }
647
            }