That still doesn't make sense to me. Could you try doing an sprintf() followed by an fwrite() then? Is fprintf() perhaps doing something stupid internally? I'd really like to avoid a lock here.
-Rasmus Rob Richards wrote: > I can confirm that it does fail with the single fprintf call without the > lock on Win32. > Using flock() does fix the problem in my tests. > I was able to fix win build using flock() instead of php_flock() and > defining HAVE_FLOCK in win32/flock.h > > Rob > > Richard Quadling wrote: >> This test is with the multiline fprintf and no lock. >> >> Adding the php_flock() has stalled the build process for Win32 (I >> can't build on Win32 as I don't know how!). >> >> >> >> On 05/04/07, Rasmus Lerdorf <[EMAIL PROTECTED]> wrote: >>> Yes, but again, is this test with the single fprintf call? That's the >>> real fix for this problem, not the lock. >>> >>> -Rasmus >>> >>> Richard Quadling wrote: >>> > Using PHP 5.2.2-dev (cli) (built: Mar 23 2007 07:02:57) I can >>> > replicate the problem on Windows. >>> > >>> > Using this single line command at the CMD prompt: >>> > >>> > for %x in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do >>> > start php -r >>> > >>> "ini_set('error_log','/tmp/test.log');for($i=0;$i<100;$i++)error_log(str_repeat('%x',5000));" >>> >>> > >>> > >>> > The log file has many broken lines. >>> > >>> > On 05/04/07, Ilia Alshanetsky <[EMAIL PROTECTED]> wrote: >>> >> Rasmus, >>> >> >>> >> Sorry for the delay in the reply. According to my tests on linux >>> >> using the sample script provided by the original bug reporter having >>> >> no lock causes a problem when the error message is >4k in length. In >>> >> this case multiple buffers are used and corruption can happen (it did >>> >> on a dual cpu machine with 10 error log writing threads running), >>> >> which is why I feel the lock is needed. >>> >> >>> >> >>> >> On 5-Apr-07, at 1:29 AM, Rasmus Lerdorf wrote: >>> >> >>> >> > Matt Wilmas wrote: >>> >> >> Hi, >>> >> >> >>> >> >> Maybe just a Windows problem if it wasn't noticed yet, but I was >>> >> >> compiling >>> >> >> the latest 5.2 snapshot and got: >>> >> >> >>> >> >> main.obj : error LNK2019: unresolved external symbol _php_flock >>> >> >> referenced >>> >> >> in function _php_log_err >>> >> >> Release_TS\php5ts.dll : fatal error LNK1120: 1 unresolved >>> externals >>> >> >> >>> >> >> Caused by this recent commit, http://news.php.net/php.cvs/43683, >>> >> >> and I >>> >> >> commented the php_flock line as a workaround. The Windows 5.2 >>> >> >> snapshots >>> >> >> haven't been updated because of this either, of course. >>> >> > >>> >> > I see no reason for that lock at all as I commented when this was >>> >> > committed, but Ilia never replied. This is a single write >>> >> > operation now >>> >> > since those fprintf's are now one, so that part of the fix is good, >>> >> > but >>> >> > the lock call is not needed since single writes in append mode are >>> >> > atomic, even on Windows. >>> >> > >>> >> > So, your work around is fine and should actually be committed. >>> >> > >>> >> > -Rasmus >>> >> > >>> >> > -- >>> >> > PHP Internals - PHP Runtime Development Mailing List >>> >> > To unsubscribe, visit: http://www.php.net/unsub.php >>> >> > >>> >> >>> >> Ilia Alshanetsky >>> >> >>> >> -- >>> >> PHP Internals - PHP Runtime Development Mailing List >>> >> To unsubscribe, visit: http://www.php.net/unsub.php >>> >> >>> >> >>> > >>> > >>> >>> >> >> -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php