Req #77377 [Csd]: No way to handle CTRL+C in Windows

From: Date: Wed, 13 Feb 2019 07:37:55 +0000
Subject: Req #77377 [Csd]: No way to handle CTRL+C in Windows
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-219549@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77377&edit=1 ID: 77377 Updated by: bwoebi@php.net Reported by: gadelat at gmail dot com Summary: No way to handle CTRL+C in Windows Status: Closed Type: Feature/Change Request Package: Win32API related Operating System: Windows 10 PHP Version: 7.2Git-2018-12-30 (Git) Assigned To: ab Block user comment: N Private report: N New Comment: @Anatol: Under linux stream_select is comfortably aborted (signal being received) - is there any way to abort stream_select() from within Windows in that case? At least the way it is now is a bit stupid - you don't want to rerun stream_select() too often, but also not wait x time units after pressing ctrl+c. I don't mind if stream_select were calling select() repeatedly every 100 ms or such _internally_ on Windows. But I feel like this is not an userland responsibility. Previous Comments: ------------------------------------------------------------------------ [2019-02-13 03:17:24] ab@php.net Added UPGRADING notes. Closing this one for now. Please open separate tickets for any subsequent issues or ideas. Thanks! ------------------------------------------------------------------------ [2019-02-12 20:39:51] ab@php.net Cool, thanks for the info so far and for filing the issue. I'm still gonna document this and then close this one. I expect there'll be more reports closer to the 7.4 final, when more people start using this functionality. Cheers. ------------------------------------------------------------------------ [2019-02-12 20:20:04] gadelat at gmail dot com stream_select is not in my expertise as I don't use it myself, just streamlined the hang to such peace of code in library. I have created issue https://github.com/amphp/amp/issues/262 and hopefully guys from AMPHP can take over this conversation. Outside of that, this works nicely ------------------------------------------------------------------------ [2019-02-12 18:12:41] ab@php.net @gadelat at gmail dot com, how is it going? :) Any other feedback? Thanks. ------------------------------------------------------------------------ [2019-02-11 00:42:15] ab@php.net Thanks for sending the code. Yes, the select sticks in a blocking call, because it's given the timeout of zero. The CTRL+C handler can't be called, as no further PHP code can be interpreted. My suggestion you do similar to the following instead while (true) { $read = [$server]; $write = []; $except = null; stream_select($read, $write, $except, 0, 5000); } The basic idea - just occasionally return from the blocking calls to give the VM a chance to handle the interrupt. It is one of the Windows specific points, as CTRL+* event doesn't automatically cancel all the I/O nor it does anything else except invoking the handler function. Internally, the VM interrupt is set, but because the select blocks, VM doesn't execute. I'll think about a way to improve this, but I'm pessimistic there can be done much. One could try to close the open descriptors, that might work, but for that one has to record all of them which might be not doable. Thanks. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=77377 -- Edit this bug report at https://bugs.php.net/bug.php?id=77377&edit=1

« previous php.bugs (#219549) next »