Edit report at https://bugs.php.net/bug.php?id=65596&edit=1

 ID:                 65596
 Comment by:         anon at anon dot anon
 Reported by:        ukrtelecom at gmail dot com
 Summary:            usleep prevents script timeout
 Status:             Wont fix
 Type:               Bug
 Package:            *General Issues
 Operating System:   Linux
 PHP Version:        5.4Git-2013-08-30 (snap)
 Block user comment: N
 Private report:     N

 New Comment:

@ab Well of course it's solvable.
1. sleepTime = min(specifiedTime, timeLimit - scriptTime)
2. Do system call.
3. scriptTime += sleepTime

I don't understand why you track script time in such a bizarre fashion that it 
somehow doesn't contribute to the time limit anyway.


Previous Comments:
------------------------------------------------------------------------
[2013-08-30 18:00:25] a...@php.net

This is unsolvable in PHP, sleep is a system call so it will suspend the 
execution 
. It can be only interrupted by a signal which can't be thrown from PHP because 
the execution is suspended :)

------------------------------------------------------------------------
[2013-08-30 15:47:44] ukrtelecom at gmail dot com

Description:
------------
Usleeped time does not count in total timeout time.

Commenting out line 11 "usleep(10)" in the test script results with expected 
Fatal timeout in 2 seconds.
Enabling line 11 "usleep(10)" makes script exit by condition in 50 seconds.
Increasing waiting time to 100 seconds in line 2 results with timeout Fatal 
error in 60-70 sec.


PHP 5.4.20-dev (cli) (built: Aug 30 2013 14:18:16) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

./configure --disable-libxml --disable-xml --disable-simplexml --disable-
xmlreader --disable-xmlwriter --disable-dom --without-pear

OS Ubuntu 12.04 LTS 
Linux precise64 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 
x86_64 x86_64 x86_64 GNU/Linux

Test script:
---------------
<?php
$wait = 50;

echo ini_get('max_execution_time');

set_time_limit(2);

$ts = time();
while(true) {
        // usleep for 10 microseconds
        usleep(10);
        if ((time()- $ts) > $wait) {
                echo time() -$ts;
                echo "\n\nFailed! " . ini_get('max_execution_time') . "\n";
                break;
        }
}



Expected result:
----------------
0
Fatal error: Maximum execution time of 2 seconds exceeded in 
/home/vagrant/t.php 
on line 12

Actual result:
--------------
#with wait time 50 sec:
$ date; php t.php ; date
Fri Aug 30 15:40:54 UTC 2013
0
51

Failed! 2
Fri Aug 30 15:41:45 UTC 2013


#with wait time 100 sec:
$ date; php t.php ; date
Fri Aug 30 15:35:45 UTC 2013
0

Fatal error: Maximum execution time of 2 seconds exceeded in 
/home/vagrant/t.php 
on line 12
Fri Aug 30 15:36:40 UTC 2013



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=65596&edit=1

Reply via email to