Critical Section¶
Overview¶
The 🔒 criticalSection tool provides multi-device synchronization for serialized execution of steps. It implements a barrier synchronization pattern where all devices must arrive at the critical section before any can proceed, and then executes steps one device at a time.
Availability¶
The 🔒 criticalSection tool is available only when AutoMobile runs as an MCP Daemon. It is not registered in standalone MCP mode.
Use Cases¶
Critical sections are useful when you need to:
- Serialize resource access: Ensure only one device at a time accesses a shared resource (e.g., payment processing, database writes)
- Prevent race conditions: Coordinate state changes across devices that must not interleave
- Synchronize multi-device tests: Ensure devices reach specific test milestones together before proceeding
- Order-dependent operations: Guarantee specific execution order for operations that affect shared state
How It Works¶
Barrier Synchronization¶
- Registration: Each device registers the expected number of devices for the lock
- Arrival: Devices arrive at the critical section and wait at a barrier
- Release: Once ALL expected devices arrive, they are released from the barrier
- Serial Execution: Devices acquire a mutex and execute their steps one at a time
- Cleanup: After execution, the lock is released and resources are cleaned up
Execution Flow¶
High-Level Flow (No Lock Details)¶
sequenceDiagram
participant A as Device A
participant C as Coordinator
participant B as Device B
C-->>A: Start parallel steps
C-->>B: Start parallel steps
Note over C,B: Reached criticalSection
Note over C,A: Reached criticalSection
C->>A: Critical Step 1 for Device A
C->>B: Critical Step 1 for Device B
C->>A: Critical Step 2 for Device A
C->>B: Critical Step 2 for Device B
Note over C,A: Ended criticalSection
Note over C,B: Ended criticalSection
C-->>A: Continue parallel steps
C-->>B: Continue parallel steps
Device-Level Flow (Parallel + Critical Section with Locking)¶
sequenceDiagram
participant C as Coordinator
participant D as Device (track A)
Note over C,D: Parallel steps (no lock)
C->>D: Execute step
D-->>C: Step result
C->>D: Execute next step
D-->>C: Step result
Note over C,D: Critical section (lock = shared-resource)
C-->>D: Wait at barrier
D->>C: Arrived at barrier
C-->>D: Barrier released (all devices arrived)
C->>D: Lock granted + execute one critical step
D-->>C: Step results
C->>D: Lock granted + execute one critical step
D-->>C: Step results
D->>C: Release lock
C-->>D: Continue parallel steps
Usage Examples¶
Two-Device Synchronization Check¶
steps:
- tool: navigateTo
params:
device: A
text: Edit Profile
- tool: tapOn
params:
device: A
text: Clear Status
- tool: navigateTo
params:
device: A
text: Search
- tool: inputText
params:
device: B
text: Test User A
- tool: imeAction
params:
device: B
text: done
- tool: criticalSection
params:
lock: profile-sync
deviceCount: 2
steps:
- tool: tapOn
params:
device: A
text: Edit Profile
- tool: tapOn
params:
device: A
text: Status
- tool: inputText
params:
device: A
text: Pretty awesome
- tool: tapOn
params:
device: A
text: Clear Status
- tool: observe
params:
device: B
await:
- text: No Status
- tool: tapOn
params:
device: A
text: Save profile
- tool: observe
params:
device: B
await:
- text: Pretty awesome
Error Handling¶
Timeout Errors¶
If not all devices reach the barrier within the timeout period:
Error: Timeout waiting for critical section "payment-lock".
2/3 devices arrived after 30000ms.
Missing devices may have failed or not reached the critical section.
Resolution: - Check that all devices are reaching the critical section - Increase timeout if devices need more time - Verify deviceCount is correct
Nesting Errors¶
If a critical section step contains another critical section:
Error: Nested critical sections are not supported.
Found criticalSection step inside critical section "outer-lock".
Resolution: - Remove nested critical sections - Use different lock names for sequential synchronization points
Step Execution Failure¶
If a step fails inside the critical section:
Error: Critical section "payment-lock" failed for device device-A:
Failed at step 2/3 (observe): Element not found
Behavior: - Execution stops immediately (fail-fast) - Lock is released - Other waiting devices will timeout - Resources are cleaned up
Limitations¶
-
No Nesting: Critical sections cannot be nested. Each lock must be distinct.
-
Fail-Fast: If any device fails inside the critical section, all devices fail. There is no partial success mode.
-
Static Device Count: The device count must be known upfront and cannot change during execution.