Почему hid.enumerate () получает SEGV, вызываемый из Flask, а не из командной строки? - PullRequest
0 голосов
/ 24 февраля 2019

Я получаю 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
...