Bug #16986 Updated: semaphore autorelease can be a bug....

From: Date: Tue, 07 May 2002 14:58:08 +0000
Subject: Bug #16986 Updated: semaphore autorelease can be a bug....
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-7151@lists.php.net to get a copy of this message
ID: 16986 Updated by: AlberT@SuperAlberT.it Reported By: AlberT@SuperAlberT.it Status: Open Bug Type: Semaphore related Operating System: Linux 2.4.18 PHP Version: 4.1.2 New Comment: Some people write me for explanations..... ok I'll be more clear I hope: READER: p(mutex); readcount++; if (readcount is 1) then p(db); v(mutex); CRITICAL REGION where we read p(mutex); readcount--; if (readcount is 0) then v(db); v(mutex); WRITER: p(db); CRITICAL REGION where we write v(db); this is the simplest r/w problem, ok ?!? let we analize it now. we have to acquire some mutex to protect owr access to variables readcount ok ?? This is possible in PHP! .. ok ! now, I'm the 1st reader .. I acquire sem DB becouse readcount is equal to 1, I release mutex and begin to READ NOW IT IS possible that an other reader arrive and it is faster than me; it DON'T acquire DB becouse readcont is now 2, it READS and DOESN'T HAVE to release sem DB becouse readcount IS NOT 1 (reader 1 is still reading !!)... PHP AUTORELEASE DB ... damn !!! Previous Comments: ------------------------------------------------------------------------ [2002-05-06 10:44:30] michel@ziobudda.net Hi, I'm the coordinator of Italian Linux Portal and just last saturday (04/05/2002 in european date) I have talked about PHP in a Linux Event. I think that the rigth "position" is the position of AlberT: If a script die and it "has" the semaphore is corret that another scripts can get that semaphore. my 0,02euro ------------------------------------------------------------------------ [2002-05-06 10:23:00] AlberT@SuperAlberT.it It cause deadlock, but only on the script... if you test your script and have a deadlock, you fix it and release the sem you forgot. I think the auto release may be a good DEFAULT, but it is important to be able to modify this behaviour. If you want to fulfill any classical IPC problem (see Tanenbuam!) You have to be able to acquire a sem, and not to realease it. Here you ca nfind an explanation of the problems one can have and that auto release make impossible to solve: http://joda.cis.temple.edu/~ingargio/old/cis307f95/readings/readwriters.html ------------------------------------------------------------------------ [2002-05-03 06:47:10] wez@php.net But a process that acquires a semaphore and then exits will case deadlocks, because no one else can acquire the semaphore?? Can you give a good example of where leaving the semaphore acquired is actually useful? ------------------------------------------------------------------------ [2002-05-03 05:37:33] AlberT@SuperAlberT.it sem_acquire() function has this behavior: After processing a request, any semaphores acquired by the process but not explicitly released will be released automatically and a warning will be generated. This is not a great thing, infact in this way the readers/writers classical IPC problem, with writers precedence is impossible to implement !!! I think an option to disable autorelease is usefull. (I sent a feature/change request, but I had no feadback :-( ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=16986&edit=1

« previous php.bugs (#7151) next »