ID: 35894 User updated by: jik at kamens dot brookline dot ma dot us Reported By: jik at kamens dot brookline dot ma dot us Status: Open Bug Type: IMAP related Operating System: Linux PHP Version: 5.1.1 New Comment:
Did you run the script twice at the same time as I said in my report? That's the only way you're going to be able to reproduce it, since it requires contention from two different processes. Previous Comments: ------------------------------------------------------------------------ [2006-01-04 19:51:27] jik at kamens dot brookline dot ma dot us $ ls -l /var/mail/jik; php /tmp/imap_open.php /var/mail/jik & php /tmp/imap_open.php /var/mail/jik -rw------- 1 jik mail 871 Jan 4 13:44 /var/mail/jik [1] 31702 starting to open mailbox starting to open mailbox successfully opened mailbox PHP Notice: Unknown: Trying to get mailbox lock from process 31702 (errflg=1) in Unknown on line 0 [1]+ User defined signal 2 php /tmp/imap_open.php /var/mail/jik $ New version of the script: <?php print "starting to open mailbox\n"; imap_open($argv[1], "", ""); print "successfully opened mailbox\n"; ?> I don't know why you can't reproduce it; it reproduces easily for me, as shown above. The c-client documentation and source code make it clear that this is going on, so unless you can confirm that PHP is installing a USR2 handle when locking mailboxes, I'm pretty sure it's a problem. ------------------------------------------------------------------------ [2006-01-04 19:33:42] [EMAIL PROTECTED] Can't reproduce. I don't see any error messages and the script works fine. ------------------------------------------------------------------------ [2006-01-04 15:48:59] jik at kamens dot brookline dot ma dot us Woops, forgot the script. Here it is: <?php imap_open($argv[1], "", ""); ?> You probably could have figured this out :-). You need an mbox file on which to run imap_open; there's no way to eliminate that dependency. ------------------------------------------------------------------------ [2006-01-04 15:40:29] jik at kamens dot brookline dot ma dot us Description: ------------ The imap c-client has code in it to send a "kiss of death" SIGUSR2 to another process that has a mailbox locked, to cause that process to give up the lock if it no longer needs it. Anything which uses c-client is supposed to define a singla handler for SIGUSR2 to catch the signal and at minimum ignore it if the client doesn't want to relinquish the lock. If it doesn't do this, then the SIGUSR2 causes the process to die, and then the other process, which sent the signal, claims the lock. It appears that PHP's imap support doesn't define a SIGUSR2 handler, which means that if (a) imap_open is used to open a local file and (b) another process on the same machine happens to use c-client to open the same file at around the same time, the first process will die silently because of the SIGUSR2. To fix this, imap_open needs to define a SIGUSR2 handler to catch and ignore the signal while it's got the mailbox locked. Reproduce code: --------------- Put this script in a file and run it with one argument, the name of a non-empty local mailbox, twice at the same time, e.g. (from bash) "php /tmp/imap_open.php /var/mail/jik & php /tmp/imap_open.php /var/mail/jik". It may not fail every time, but at least some of the times you do this, okne of the two php processes will print an error and exit because of the USR2 signal. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=35894&edit=1