[php-src] Issue #8309: SIGPIPE while using curl
| From: | enumag | Date: | Sun, 10 Apr 2022 15:17:18 +0000 |
| Subject: | [php-src] Issue #8309: SIGPIPE while using curl | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-240827@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/8309
Comment Author: enumag
I managed to get debug symbols for libcurl so I have slightly more complete backtrace now (see
below). Unfortunately I was unable to find debug symbols for openssl anywhere so those are still
missing. Any idea where to get them? Our docker image is debian-based.
As for
pcntl_signal, not that I'm aware of but I'm not the only person
working on it so I'll double check with my colleague tomorrow.
```
#0 __GI___libc_write (nbytes=24, buf=0x55555716d633, fd=33) at
../sysdeps/unix/sysv/linux/write.c:26
#1 __GI___libc_write (fd=33, buf=0x55555716d633, nbytes=24) at
../sysdeps/unix/sysv/linux/write.c:24
#2 0x00007ffff79965c5 in ?? () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
#3 0x00007ffff799172a in ?? () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
#4 0x00007ffff7990784 in ?? () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
#5 0x00007ffff7990c43 in BIO_write () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
#6 0x00007ffff7be991a in ?? () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#7 0x00007ffff7bea809 in ?? () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#8 0x00007ffff7bf41da in ?? () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#9 0x00007ffff7bf2425 in ?? () from /usr/lib/x86_64-linux-gnu/libssl.so.1.1
#10 0x00007ffff7740492 in ossl_close (connssl=<optimized out>, connssl=<optimized out>)
at vtls/openssl.c:1365
#11 0x00007ffff77404f1 in Curl_ossl_close (conn=0x55555748aa20, sockindex=<optimized out>) at
vtls/openssl.c:1382
#12 0x00007ffff7746b8b in Curl_ssl_close (conn=conn@entry=0x55555748aa20,
sockindex=sockindex@entry=0) at vtls/vtls.c:632
#13 0x00007ffff76fcf4a in conn_shutdown (conn=0x55555748aa20) at url.c:720
#14 Curl_disconnect (data=data@entry=0x5555570e54d0, conn=0x55555748aa20,
dead_connection=dead_connection@entry=true) at url.c:838
#15 0x00007ffff76ffa8e in prune_dead_connections (data=0x5555570e54d0) at url.c:1040
#16 create_conn (async=0x7fffffff5a47, in_connect=<synthetic pointer>, data=0x7fffffff59c0) at
url.c:3725
#17 Curl_connect (data=data@entry=0x5555570e54d0, asyncp=asyncp@entry=0x7fffffff5ab7,
protocol_done=protocol_done@entry=0x7fffffff5ab8) at url.c:4003
#18 0x00007ffff771bc99 in multi_runsingle (multi=0x5555570e7350, nowp=0x7fffffff5b30,
data=0x5555570e54d0) at multi.c:1679
#19 0x00007ffff771cc06 in curl_multi_perform (multi=multi@entry=0x5555570e7350,
running_handles=running_handles@entry=0x7fffffff5c38) at multi.c:2417
#20 0x00007ffff76f3943 in easy_transfer (multi=<optimized out>) at easy.c:593
#21 easy_perform (events=false, data=0x5555570e54d0) at easy.c:683
#22 curl_easy_perform (data=0x5555570e54d0) at easy.c:702
#23 0x000055555589672c in zif_curl_exec (execute_data=0x7ffff4816770, return_value=0x7fffffff5df0)
at /usr/src/php/ext/curl/interface.c:3063
#24 0x0000555555cd42f2 in ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER () at
/usr/src/php/Zend/zend_vm_execute.h:1235
#25 0x0000555555d4af87 in execute_ex (ex=0x7fff00000001) at
/usr/src/php/Zend/zend_vm_execute.h:55400
#26 0x0000555555d7066d in zend_generator_resume (orig_generator=0x7fffe026c1c0) at
/usr/src/php/Zend/zend_generators.c:747
#27 0x0000555555d70969 in zend_generator_ensure_initialized (generator=0x7fffe026c1c0) at
/usr/src/php/Zend/zend_generators.c:804
#28 0x0000555555d709a0 in zend_generator_rewind (generator=0x7fffe026c1c0) at
/usr/src/php/Zend/zend_generators.c:812
#29 0x0000555555d717d2 in zend_generator_iterator_rewind (iterator=0x7fffe39f8580) at
/usr/src/php/Zend/zend_generators.c:1059
#30 0x0000555555cd8b38 in ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER () at
/usr/src/php/Zend/zend_vm_execute.h:2581
#31 0x0000555555d4b077 in execute_ex (ex=0x7fff00000003) at
/usr/src/php/Zend/zend_vm_execute.h:55460
#32 0x0000555555d4f8b3 in zend_execute (op_array=0x7ffff485e280, return_value=0x0) at
/usr/src/php/Zend/zend_vm_execute.h:59771
#33 0x0000555555c976e7 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at
/usr/src/php/Zend/zend.c:1759
#34 0x0000555555bed4ed in php_execute_script (primary_file=0x7fffffff8960) at
/usr/src/php/main/main.c:2538
#35 0x0000555555e0e0a5 in do_cli (argc=28, argv=0x555556db62c0) at
/usr/src/php/sapi/cli/php_cli.c:965
#36 0x0000555555e0f284 in main (argc=28, argv=0x555556db62c0) at
/usr/src/php/sapi/cli/php_cli.c:1367
```
I also managed to get php backtrace using dump_bt executor_globals.current_execute_data
from your .gdbinit.
```
[0x7ffff4816770] curl_exec(object[0x7ffff48167c0]) [internal function]
[0x7ffff48166d0] GuzzleHttp\Handler\CurlHandler->__invoke(object[0x7ffff4816720],
array(8)[0x7ffff4816730]) /app/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php:44
[0x7ffff4816620] GuzzleHttp\Handler\Proxy->GuzzleHttp\Handler\{closure}(object[0x7ffff4816670],
array(8)[0x7ffff4816680]) /app/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php:28
[0x7ffff4816570] GuzzleHttp\Handler\Proxy->GuzzleHttp\Handler\{closure}(object[0x7ffff48165c0],
array(8)[0x7ffff48165d0]) /app/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php:48
[0x7ffff48164b0] GuzzleHttp\Middleware->GuzzleHttp\{closure}(object[0x7ffff4816500],
array(8)[0x7ffff4816510]) /app/vendor/guzzlehttp/guzzle/src/Middleware.php:201
[0x7ffff48163d0] GuzzleHttp\PrepareBodyMiddleware->__invoke(object[0x7ffff4816420],
array(8)[0x7ffff4816430]) /app/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php:64
[0x7ffff4816320] GuzzleHttp\Middleware->GuzzleHttp\{closure}(object[0x7ffff4816370],
array(8)[0x7ffff4816380]) /app/vendor/guzzlehttp/guzzle/src/Middleware.php:31
[0x7ffff4816280] GuzzleHttp\RedirectMiddleware->__invoke(object[0x7ffff48162d0],
array(8)[0x7ffff48162e0]) /app/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php:71
[0x7ffff48161e0] GuzzleHttp\Middleware->GuzzleHttp\{closure}(object[0x7ffff4816230],
array(8)[0x7ffff4816240]) /app/vendor/guzzlehttp/guzzle/src/Middleware.php:63
[0x7ffff4816150] GuzzleHttp\HandlerStack->__invoke(object[0x7ffff48161a0],
array(8)[0x7ffff48161b0]) /app/vendor/guzzlehttp/guzzle/src/HandlerStack.php:75
[0x7ffff4816000] GuzzleHttp\Client->transfer(object[0x7ffff4816050], reference)
/app/vendor/guzzlehttp/guzzle/src/Client.php:331
[0x7ffff4815f80] GuzzleHttp\Client->sendAsync(object[0x7ffff4815fd0], array(9)[0x7ffff4815fe0])
/app/vendor/guzzlehttp/guzzle/src/Client.php:107
[0x7ffff4815f00] GuzzleHttp\Client->send(object[0x7ffff4815f50])
/app/vendor/guzzlehttp/guzzle/src/Client.php:123
...more application specific classes
```
It happens randomly on a file upload guzzle requests (randomly with rather low probability).
Replacing Guzzle's CurlHandler with StreamHandler fixes the problem.