Bug #80907 [Com]: Seg fault with pcntl_alarm() when triggered while waiting on IO

From: Date: Thu, 25 Mar 2021 22:21:39 +0000
Subject: Bug #80907 [Com]: Seg fault with pcntl_alarm() when triggered while waiting on IO
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-233000@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80907&edit=1

 ID:                 80907
 Comment by:         danack@php.net
 Reported by:        tobias dot nyholm at gmail dot com
 Summary:            Seg fault with pcntl_alarm() when triggered while
                     waiting on IO
 Status:             Open
 Type:               Bug
 Package:            PCNTL related
 Operating System:   OSX
 PHP Version:        7.4.16
 Block user comment: N
 Private report:     N

 New Comment:

Hi Tobias,

I think I can reproduce, but on an older version. Do you have a crash log in
~/Library/Logs/DiagnosticReports/ ?

That should contain a stacktrace. If one doesn't appear there, running the code with sudo
dtruss php debug.php might be a magic invocation that makes one appear.

Please post the stacktrace if you can.


Previous Comments:
------------------------------------------------------------------------
[2021-03-25 21:40:13] tobias dot nyholm at gmail dot com

Thank you for trying to reproduce. 

I've installed PHP with homebrew. The bug is present on PHP 7.4.10 and 7.4.14. Not on PHP 8.0.1

---------

❯ php -v
PHP 7.4.14 (cli) (built: Jan  5 2021 14:30:27) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.14, Copyright (c), by Zend Technologies
    with blackfire v1.48.1~mac-x64-non_zts74, https://blackfire.io, by Blackfire

❯ php alarm.php 
.[1]    33291 segmentation fault  php alarm.php


❯ php8 -v
PHP 8.0.1 (cli) (built: Jan  7 2021 17:26:28) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.1, Copyright (c) Zend Technologies
    with Xdebug v3.0.2, Copyright (c) 2002-2021, by Derick Rethans
    with Zend OPcache v8.0.1, Copyright (c), by Zend Technologies


❯ php8 alarm.php 
.PHP Fatal error:  Uncaught RuntimeException: Maximum execution time reached in
/workspace/alarm.php:5
Stack trace:
#0 /workspace/alarm.php(13): {closure}(14, Array)
#1 /workspace/alarm.php(21): Worker->work()
#2 {main}
  thrown in /workspace/alarm.php on line 5

Fatal error: Uncaught RuntimeException: Maximum execution time reached in /workspace/alarm.php on
line 5

RuntimeException: Maximum execution time reached in /workspace/alarm.php on line 5

Call Stack:
    0.0003     464296   1. {main}() /workspace/alarm.php:0
    0.0005     469392   2. Worker->work() /workspace/alarm.php:21
    2.0052     469896   3. {closure:/workspace/alarm.php:4-6}(14, ['signo' => 14,
'errno' => 0, 'code' => 0]) /workspace/alarm.php:13

------------------------------------------------------------------------
[2021-03-25 20:55:11] dc dot link at yahoo dot fr

Was unable to reproduce it with Mac Intel and M1 with and without debug. Does it occur all the time
and was it build from source or is it homebrew/macports ?

------------------------------------------------------------------------
[2021-03-25 14:44:29] tobias dot nyholm at gmail dot com

Description:
------------
When using pcntl_alarm() and the alarm is triggered when waiting for IO inside a 
class, I get a "42064 segmentation fault". 

If the for loop is executing in the global namespace, everything is fine. 


Test script:
---------------
<?php

pcntl_async_signals(true);
pcntl_signal(SIGALRM, function () {
    throw new \RuntimeException('Maximum execution time reached');
});
pcntl_alarm(2);

class Worker
{
    public function work()
    {
        for ($i = 0; $i< 10; $i++) {
            echo '.';
            sleep(5);
        }
    }
}

$worker = new Worker();
$worker->work();
echo "end";


Expected result:
----------------
.PHP Fatal error:  Uncaught RuntimeException: Maximum execution time reached in
/Users/tobias/Workspace/PHPStorm/bref/alarm.php:5
Stack trace:
#0 /Users/tobias/Workspace/PHPStorm/bref/alarm.php(13): {closure}(14, Array)
#1 /Users/tobias/Workspace/PHPStorm/bref/alarm.php(21): Worker->work()
#2 {main}
  thrown in /Users/tobias/Workspace/PHPStorm/bref/alarm.php on line 5


Actual result:
--------------
❯ php alarm.php
.[1]    41920 segmentation fault  php alarm.php



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



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


Thread (8 messages)

« previous php.bugs (#233000) next »