|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2003-11-21 21:21 UTC] sniper@php.net
[2003-11-21 22:19 UTC] mlemos at acm dot org
[2003-11-23 20:41 UTC] iliaa@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Oct 30 02:00:01 2025 UTC |
Description: ------------ flock() does not initialize the wouldblock argument when present and it succeeds locking, even when non-blocking locking is requested. It is also failing when wouldblock argument is not present but non blocking locking is requested and flock() system call returns EWOULDBLOCK. This is a minor issue. This patch should fix both issues: *** ext/standard/file.c 2003-11-21 18:39:13.000000000 -0200 --- ext/standard/file.c.fixed 2003-11-21 18:39:00.000000000 -0200 *************** *** 251,261 **** if (arg2 & 4) we won't block on the lock */ act = flock_values[act - 1] | (Z_LVAL_PP(arg2) & 4 ? LOCK_NB : 0); if (flock(fd, act)) { ! if (errno == EWOULDBLOCK && arg_count == 3) { ! ZVAL_LONG(*arg3, 1); } else { RETURN_FALSE; ! } } RETURN_TRUE; } --- 251,269 ---- if (arg2 & 4) we won't block on the lock */ act = flock_values[act - 1] | (Z_LVAL_PP(arg2) & 4 ? LOCK_NB : 0); if (flock(fd, act)) { ! if ((Z_LVAL_PP(arg2) & 4) && errno == EWOULDBLOCK) { ! if(arg_count == 3) { ! ZVAL_LONG(*arg3, 1); ! } } else { RETURN_FALSE; ! } ! } ! else ! { ! if(arg_count == 3) { ! ZVAL_LONG(*arg3, 0); ! } } RETURN_TRUE; } Reproduce code: --------------- <?php if(!($file=(fopen("testfile","w")))) die("could not open file"); if(flock($file,6,&$wouldblock)) echo "flock succeed, wouldblock ",serialize($wouldblock),"\n"; else echo "flock failed\n"; fclose($file); ?> Expected result: ---------------- flock succeed, wouldblock i:0; Actual result: -------------- flock succeed, wouldblock N;