diff options
author | Matteo Beccati <mbeccati@php.net> | 2014-07-25 11:21:47 +0200 |
---|---|---|
committer | Matteo Beccati <mbeccati@php.net> | 2014-09-10 07:31:25 +0200 |
commit | 0b648a424fd0ee7039ba4cb50b2bc64c2773b58a (patch) | |
tree | 4bb06ff1960f629499ad36cda928f1d68e1c70e4 /ext/sysvsem/tests | |
parent | 3571a68ab9f41258b4f25daba06fa98abce9281a (diff) | |
download | php-git-0b648a424fd0ee7039ba4cb50b2bc64c2773b58a.tar.gz |
FR #67990 - Added nowait argument to sem_acquire
Diffstat (limited to 'ext/sysvsem/tests')
-rw-r--r-- | ext/sysvsem/tests/nowait.phpt | 103 | ||||
-rw-r--r-- | ext/sysvsem/tests/sysv.phpt | 4 |
2 files changed, 105 insertions, 2 deletions
diff --git a/ext/sysvsem/tests/nowait.phpt b/ext/sysvsem/tests/nowait.phpt new file mode 100644 index 0000000000..0a6fdf4a50 --- /dev/null +++ b/ext/sysvsem/tests/nowait.phpt @@ -0,0 +1,103 @@ +--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. diff --git a/ext/sysvsem/tests/sysv.phpt b/ext/sysvsem/tests/sysv.phpt index 6f52f3bd7e..ccfcf03d32 100644 --- a/ext/sysvsem/tests/sysv.phpt +++ b/ext/sysvsem/tests/sysv.phpt @@ -9,8 +9,8 @@ if(!extension_loaded('sysvsem') || !extension_loaded('sysvshm')) { --FILE-- <?php $MEMSIZE = 512; // size of shared memory to allocate -$SEMKEY = 1; // Semaphore key -$SHMKEY = 2; // Shared memory key +$SEMKEY = ftok(__FILE__, 'P'); // Semaphore key +$SHMKEY = ftok(__FILE__, 'Q'); // Shared memory key echo "Start.\n"; // Get semaphore |