Что значит enable-pthreads = shared? - PullRequest
0 голосов
/ 06 мая 2019

Я разрабатываю расширение php.Это расширение должно работать с расширением pthreads вместе.У меня есть Ubuntu 18.04 и PHP 7.2.2 с включенным ZTS.Когда я тестирую свое расширение только с 1 потоком, оно работает хорошо, но если я увеличиваю потоки до 2 или более, я получаю много ошибок ошибки сегментации.Когда я включаю более 1 потока, я получаю ошибки, связанные с библиотекой libssh2, которую я использую в своем расширении.Я подозреваю, что это происходит, потому что я не скомпилировал свое расширение с enable-pthreads=shared.

Я не уверен, что эта обратная трассировка поможет, но обратная трассировка ошибки следующая:

Thread 3 "php" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffe93ff700 (LWP 6578)]
0x00007ffff54329eb in BN_CTX_start () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
(gdb) bt
#0  0x00007ffff54329eb in BN_CTX_start () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
#1  0x00007ffff543b26c in ?? () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
#2  0x00007ffff543b2ce in BN_from_montgomery () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
#3  0x00007ffff5434f52 in BN_mod_exp_mont () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
#4  0x00007fffeb08b4a6 in diffie_hellman_sha1 (session=session@entry=0x7fffe42c6c70, g=<optimized out>, p=0x7fffe41ffd90, group_order=group_order@entry=256, packet_type_init=packet_type_init@entry=30 '\036', 
    packet_type_reply=packet_type_reply@entry=31 '\037', midhash=0x0, midhash_len=0, exchange_state=0x7fffe42d3948) at kex.c:340
#5  0x00007fffeb08c85a in kex_method_diffie_hellman_group14_sha1_key_exchange (session=0x7fffe42c6c70, key_state=0x7fffe42d3930) at kex.c:1488
#6  0x00007fffeb08e551 in _libssh2_kex_exchange (session=session@entry=0x7fffe42c6c70, reexchange=reexchange@entry=1, key_state=key_state@entry=0x7fffe42d3918) at kex.c:2566
#7  0x00007fffeb09f5a4 in _libssh2_transport_send (session=session@entry=0x7fffe42c6c70, data=data@entry=0x7fffe42d3a88 "\001", data_len=42, data2=data2@entry=0x7fffeb2b3131 "", data2_len=0) at transport.c:734
#8  0x00007fffeb096407 in session_disconnect (lang=0x7fffeb2b3131 "", description=0x7fffeb2b3143 "Client disconnecting normally", reason=11, session=0x7fffe42c6c70) at session.c:1135
#9  libssh2_session_disconnect_ex (session=0x7fffe42c6c70, reason=11, desc=0x7fffeb2b3143 "Client disconnecting normally", lang=0x7fffeb2b3131 "") at session.c:1155
---Type <return> to continue, or q <return> to quit---
#10 0x00007fffeb2b1a41 in ssh_disconnect () at /home/mike/Documents/PHP/php-src-php-7.2.2/ext/super_ssh/super_ssh.c:107
#11 0x00007fffeb2b218a in zif_super_ssh_connect (execute_data=0x7fffe8822000, return_value=0x7fffe8821e70) at /home/mike/Documents/PHP/php-src-php-7.2.2/ext/super_ssh/super_ssh.c:329
#12 0x0000555555f7978a in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /home/mike/Documents/PHP/php-src-php-7.2.2/Zend/zend_vm_execute.h:1032
#13 0x0000555556005f1d in execute_ex (ex=0x7fffe8821bc0) at /home/mike/Documents/PHP/php-src-php-7.2.2/Zend/zend_vm_execute.h:59752
#14 0x00007fffeae5d583 in pthreads_execute_ex (data=0x7fffe8821bc0) at /home/mike/Documents/PHP/pthreads/php_pthreads.c:135
#15 0x0000555555f7967c in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /home/mike/Documents/PHP/php-src-php-7.2.2/Zend/zend_vm_execute.h:1013
#16 0x0000555556005f1d in execute_ex (ex=0x7fffe88218c0) at /home/mike/Documents/PHP/php-src-php-7.2.2/Zend/zend_vm_execute.h:59752
#17 0x00007fffeae5d583 in pthreads_execute_ex (data=0x7fffe88218c0) at /home/mike/Documents/PHP/pthreads/php_pthreads.c:135
#18 0x0000555555f7967c in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /home/mike/Documents/PHP/php-src-php-7.2.2/Zend/zend_vm_execute.h:1013
#19 0x0000555556005f1d in execute_ex (ex=0x7fffe8821280) at /home/mike/Documents/PHP/php-src-php-7.2.2/Zend/zend_vm_execute.h:59752
#20 0x00007fffeae5d583 in pthreads_execute_ex (data=0x7fffe8821280) at /home/mike/Documents/PHP/pthreads/php_pthreads.c:135
---Type <return> to continue, or q <return> to quit---
#21 0x0000555555f7967c in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /home/mike/Documents/PHP/php-src-php-7.2.2/Zend/zend_vm_execute.h:1013
#22 0x0000555556005f1d in execute_ex (ex=0x7fffe8821030) at /home/mike/Documents/PHP/php-src-php-7.2.2/Zend/zend_vm_execute.h:59752
#23 0x00007fffeae5d583 in pthreads_execute_ex (data=0x7fffe8821030) at /home/mike/Documents/PHP/pthreads/php_pthreads.c:135
#24 0x0000555555eec3a6 in zend_call_function (fci=0x7fffe93feb80, fci_cache=0x7fffe93febb8) at /home/mike/Documents/PHP/php-src-php-7.2.2/Zend/zend_execute_API.c:819
#25 0x00007fffeae72019 in pthreads_routine_run_function (object=0x7fffead86700, connection=0x7fffe886c900, work=0x7fffe93fed00) at /home/mike/Documents/PHP/pthreads/src/object.c:481
#26 0x00007fffeae723a0 in pthreads_routine (routine=0x7fffffffad70) at /home/mike/Documents/PHP/pthreads/src/object.c:516
#27 0x00007ffff5e9e6db in start_thread (arg=0x7fffe93ff700) at pthread_create.c:463
#28 0x00007ffff3cc088f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Итак, я понимаю, что enable-pthreads=shared разрешает pthreads для расширения в некотором роде, но янужно объяснение.Как мы знаем, каждый поток в PHP должен иметь собственный интерпретатор и все свои экземпляры расширений и т. Д. Что произойдет, если я не скомпилировал свое расширение с enable-pthreads=shared?Все потоки php будут использовать один и тот же экземпляр расширения?Я думаю, что segfaults связаны с pthreads, потому что в 1 потоке я успешно тестировал скрипт около 24 часов.С 2 или более потоков я получаю segfaults через несколько секунд.Может кто-нибудь объяснить мне, пожалуйста?

...