That's good news. Has a patch been submitted? Even if it is initially
only a win32 compiler directive wrapping the lock?

On 14/04/07, Rob Richards <[EMAIL PROTECTED]> wrote:
I can sometimes reproduce the missing entries though never get data
corruption anymore.
This might now be a Windows only issue with how it is caching writes. I
did a little debugging and no errors occurred.
The file was opened successfully every time, the data was written
(correct number of bytes as well) every single time, but depending upon
the load on my system at the time it was a crap shoot whether every
single write actually made it into the physical file or not. Adding a
lock here did resolve it so that it worked 100% of the time.

Rob

Richard Quadling wrote:
> So why are there missing entries?
>
> I can even get the corruption back again if I use a shorter line (100
> rather than 5000).
>
>
> On 13/04/07, Ilia Alshanetsky <[EMAIL PROTECTED]> wrote:
>> The new implementation does not use any locks, instead it uses direct
>> io, where locks are not necessary for append operations.
>>
>>
>> On 13-Apr-07, at 6:33 AM, Richard Quadling wrote:
>>
>> > On 05/04/07, Rob Richards <[EMAIL PROTECTED]> wrote:
>> >> No difference using sprintf()/fwrite() instead of fprintf().
>> >>
>> >> I did come across a similar issue from apache:
>> >> http://mail-archives.apache.org/mod_mbox/httpd-dev/199503.mbox/%
>> >> [EMAIL PROTECTED]
>> >>
>> >> Changing to use VCWD_OPEN_MODE, write() and close() seems to work.
>> >>
>> >> Rob
>> >>
>> >
>> > Using PHP 5.2.2RC2-dev (cli) (built: Apr 13 2007 04:03:02) on
>> > Windows with
>> >
>> > 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<1000;
>> > $i++)error_log(str_repeat('%x',5000));"`;
>> >
>> > And then doing some analysis of the log file I'm finding that not all
>> > the data has been written.
>> >
>> > Array
>> > (
>> >    [A] => 4965993
>> >    [B] => 4590918
>> >    [C] => 4525905
>> >    [D] => 4695939
>> >    [E] => 4495899
>> >    [F] => 4710942
>> >    [G] => 4495899
>> >    [H] => 4645929
>> >    [I] => 4540908
>> >    [J] => 4580916
>> >    [K] => 4535907
>> >    [L] => 4470894
>> >    [M] => 4480896
>> >    [N] => 4550910
>> >    [O] => 4610922
>> >    [P] => 4500900
>> >    [Q] => 4630926
>> >    [R] => 4480896
>> >    [S] => 4500900
>> >    [T] => 4535907
>> >    [U] => 4630926
>> >    [V] => 4470894
>> >    [W] => 4645929
>> >    [X] => 4825965
>> >    [Y] => 4845969
>> >    [Z] => 4920984
>> > )
>> > Lines (Should be 26 * 1000) : 23973
>> > Longest (Should be 5024) : 5024
>> > Shortest (Should be 5024) : 5024
>> >
>> > Out of the 26,000 lines expected we are missing 2027 lines.
>> >
>> > So no corruption of the lines, just missing ones.
>> >
>> > The only explanation I can think of is that the locking is working,
>> > but nothing is waiting for the lock to become available.
>> >
>> > Richard.
>> >
>> >
>> > --
>> > -----
>> > Richard Quadling
>> > Zend Certified Engineer : http://zend.com/zce.php?
>> > c=ZEND002498&r=213474731
>> > "Standing on the shoulders of some very clever giants!"
>>
>> Ilia Alshanetsky
>>
>>
>>
>>
>>
>
>



--
-----
Richard Quadling
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
"Standing on the shoulders of some very clever giants!"

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to