Excerpt from `functions_f_jets\Functions\Ejection\fn_planeEjection.sqf`:
```
//deploy parachute
if (isPlayer _pilot) then
{
disableUserInput true;
};
private _parachute = createvehicle [_ejectionParachute,getPos _ejectionSeat,[],0,"CAN_COLLIDE"];
_parachute setPosWorld (_ejectionSeat modelToWorldWorld [0,0,2.5]);
_parachute setDir getDir _ejectionSeat;
waitUntil
{
_pilot moveInDriver _parachute;
_pilot in _parachute
};
if !(_pilot in _parachute) then
{
_pilot moveInDriver _parachute;
};
_parachute lock 2;
sleep 1; //to make sure parachute is locked and player cannot use Get Out ;(
if (isPlayer _pilot) then
{
disableUserInput false;
};
```
**In the code above**, user input is disabled before parachute deployment, and re-enabled afterwards. However, sometimes the parachute spawns in a bugged state and `moveInDriver` fails on every attempt. This causes the script to stays stuck in the `waitUntil` loop indefinitely, preventing the user from regaining input, requiring to terminate the game. A simple workaround is adding a 2-second timeout to `waitUntil`:
```
_time = time;
waitUntil
{
_pilot moveInDriver _parachute;
_pilot in _parachute || time - _time > 2;
};
```
Never create a synchronous wait condition without a timeout.