Я получаю SEGV при вызове hid_enumerate (), но только когда он вызывается из моего микросервера Flask на основе macOS.
Вопросы:
Есть ли подсказки, как лучше изолировать эту ошибку?(Подробности см. Ниже).
Тогда где лучшее место, чтобы сообщить об этом (кроме SO, конечно! :) - Flask, Python, CPython, apple.core.Foundation?
Подробности:
У меня есть функция, которая вызывает hid.enumerate()
следующим образом:
import hid
class UsbScanner(object):
def scan():
return hid.enumerate(0,0)
Я могу вызывать этот метод несколько раз из командной строки без каких-либо проблем, используя Flask'sсобственная среда выполнения:
$ flask shell
>>> from models import UsbScanner
>>> scanner = UsbScanner()
>>> scanner.scan()
[...results...]
>>> scanner.scan()
[...results...]
... etc ...
, но когда эта же функция вызывается из Flask, работающего в качестве сервера, происходит сбой примерно каждый раз, когда не выводится обратный след:
$ flask run
* Serving Flask app "smrt.py" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 160-809-315
# (first request here processed okay)
Registering Smart Cable: 0000817439
127.0.0.1 - - [23/Feb/2019 19:14:27] "GET /api/v1/sample HTTP/1.1" 200 -
# (second request here gets SEGV & returns to command prompt)
(server) [~/github/server]$
Просмотржурнал сбоев, вы можете увидеть, как он получает SEGV изнутри hid_enumerate
.Выдержки из журнала аварий:
Process: python3.7 [34964]
Path: /Users/USER/*/python3.7
Identifier: python3.7
Version: 0
Code Type: X86-64 (Native)
Parent Process: python3.7 [34963]
Responsible: python3.7 [34964]
User ID: 503
Date/Time: 2019-02-23 18:18:39.071 -0800
OS Version: Mac OS X 10.14.3 (18D109)
...
Crashed Thread: 4
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: EXC_I386_GPFLT
Exception Note: EXC_CORPSE_NOTIFY
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [34964]
Thread 4 Crashed:
0 com.apple.CoreFoundation 0x00007fff2e095aef CFSetGetValue + 11
1 com.apple.CoreFoundation 0x00007fff2e095711 __CFRunLoopFindMode + 167
2 com.apple.CoreFoundation 0x00007fff2e0ae823 CFRunLoopAddSource + 282
3 com.apple.framework.IOKit 0x00007fff30b0c029 IOHIDDeviceScheduleWithRunLoop + 69
4 com.apple.framework.IOKit 0x00007fff30b0ec54 __IOHIDManagerDeviceApplier + 493
5 com.apple.framework.IOKit 0x00007fff30ae1b5f __IOHIDManagerDeviceAdded + 341
6 com.apple.framework.IOKit 0x00007fff30ae18c9 __IOHIDManagerSetDeviceMatching + 211
7 hid.cpython-37m-darwin.so 0x000000010c2e4741 hid_enumerate + 209
8 hid.cpython-37m-darwin.so 0x000000010c2e3f2a __pyx_pw_3hid_1enumerate + 666
9 org.python.python 0x000000010abc462d _PyMethodDef_RawFastCallKeywords + 685
10 org.python.python 0x000000010abc3a9a _PyCFunction_FastCallKeywords + 42