Linux vps-61133.fhnet.fr 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64
Apache/2.4.25 (Debian)
Server IP : 93.113.207.21 & Your IP : 216.73.216.112
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
src /
php-7.4.33 /
ext /
sysvsem /
tests /
Delete
Unzip
Name
Size
Permission
Date
Action
nowait.phpt
3.24
KB
-rw-rw-r--
2022-10-31 11:36
sysv.phpt
2.78
KB
-rw-rw-r--
2022-10-31 11:36
Save
Rename
--TEST-- Test sem_acquire with nowait option --SKIPIF-- <?php if(!extension_loaded('sysvsem') || !extension_loaded('pcntl')) { die("skip sysvsem and pcntl required"); } ?> --FILE-- <?php $P_SEMKEY = ftok(__FILE__, 'P'); // Parent Semaphore key $C_SEMKEY = ftok(__FILE__, 'C'); // Child Semaphore key echo "P: parent process running.\n"; pcntl_signal(SIGCHLD, SIG_IGN); // Get semaphore for parent $p_sem_id = sem_get($P_SEMKEY, 1); if ($p_sem_id === FALSE) { echo "P: failed to parent get semaphore\n"; exit; } echo "P: got semaphore $p_sem_id.\n"; // Get semaphore for child $c_sem_id = sem_get($C_SEMKEY, 1); if ($c_sem_id === FALSE) { echo "P: failed to child get semaphore\n"; exit; } // Acquire semaphore for parent if (!sem_acquire($p_sem_id)) { echo "P: fail to acquire semaphore $p_sem_id.\n"; sem_remove($p_sem_id); exit; } echo "P: acquired semaphore $p_sem_id.\n"; // Acquire semaphore for child if (!sem_acquire($c_sem_id)) { echo "P: fail to acquire semaphore $c_sem_id.\n"; sem_remove($c_sem_id); exit; } echo "P: acquired semaphore $c_sem_id\n"; // Fork process $pid = pcntl_fork(); if ($pid) { register_shutdown_function(function () use ($p_sem_id) { echo "P: removing semaphore $p_sem_id.\n"; sem_remove($p_sem_id); }); // Release semaphore after 50ms usleep(50000); /* Wait for the child semaphore to be released to to release the parent semaphore */ if (!sem_acquire($c_sem_id)) { echo "P: failed to acquire semaphore $c_sem_id.\n"; exit; } /* Release the child semahpore before releasing the releasing the parent semaphore and letting the child continue execution */ sem_release($c_sem_id); echo "P: releasing semaphore $p_sem_id.\n"; if (!sem_release($p_sem_id)) { echo "P: failed to release semaphore\n"; } $status = null; pcntl_waitpid($pid, $status); } else { register_shutdown_function(function () use ($c_sem_id) { echo "C: removing semaphore $c_sem_id.\n"; sem_remove($c_sem_id); }); echo "C: child process running.\n"; // Have the semaphore after process forked echo "C: got semaphore $p_sem_id and $c_sem_id.\n"; // This should fail to get to the semaphore and not wait if (sem_acquire($p_sem_id, true)) { echo "C: test failed, Child was able to acquire semaphore $p_sem_id.\n"; exit; } // The child process did not wait to acquire the semaphore echo "C: failed to acquire semaphore $p_sem_id.\n"; echo "C: releasing semaphore $c_sem_id\n"; if (!sem_release($c_sem_id)) { echo "C: Failed to release semaphore\n"; } // Acquire semaphore with waiting if (!sem_acquire($p_sem_id)) { echo "C: fail to acquire semaphore $p_sem_id.\n"; exit; } echo "C: success acquired semaphore $p_sem_id.\n"; echo "C: releasing semaphore $p_sem_id.\n"; sem_release($p_sem_id); } ?> --EXPECTF-- P: parent process running. P: got semaphore Resource id #%i. P: acquired semaphore Resource id #%i. P: acquired semaphore Resource id #%i C: child process running. C: got semaphore Resource id #%i and Resource id #%i. C: failed to acquire semaphore Resource id #%i. C: releasing semaphore Resource id #%i P: releasing semaphore Resource id #%i. C: success acquired semaphore Resource id #%i. C: releasing semaphore Resource id #%i. C: removing semaphore Resource id #%i. P: removing semaphore Resource id #%i.