Issue42891
This issue tracker has been migrated to GitHub,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2021-01-11 14:48 by amirouche, last changed 2022-04-11 14:59 by admin. This issue is now closed.
Messages (7) | |||
---|---|---|---|
msg384836 - (view) | Author: Amirouche Boubekki (amirouche) | Date: 2021-01-11 14:48 | |
Here is a simple way to reproduce: from lsm import LSM db = LSM('db.sqlite') def app(environ, start_response): """Simplest possible application object""" for (index, (key, value)) in enumerate(db[b'\x00':b'\xFF']): pass start_response(b'200', {}) return b'' db.close() In my real program, if I add 'global db' in the function `app`, it does not segfault. program: https://git.sr.ht/~amirouche/segfault trace: https://wyz.fr/0I-MO |
|||
msg384838 - (view) | Author: STINNER Victor (vstinner) * | Date: 2021-01-11 14:55 | |
I put the code in a "bla.p" script and I ran it with Python 3.8 on Fedora 33: python3.8 -m venv env env/bin/python -m pip install lsm-db env/bin/python bla.py It doesn't crash. Please provide a script reproducing the issue. Note: lsm-db cannot be installed in Python 3.9 (errors about the removed PyTypeObject.tp_print member in C). |
|||
msg384839 - (view) | Author: Amirouche Boubekki (amirouche) | Date: 2021-01-11 15:01 | |
You need to run the program with the following: python -X dev -c "from gunicorn.app.wsgiapp import run; run()" --workers=1 foobar:app where foobar.py is the code from the previous message. The crash happen when, the function `app` is executed, hence you need to call in another console: curl http://localhost:8000 note: lsm package can be installed with pip install lsm-db note2: lsm db can not be installed with py3.9 |
|||
msg384840 - (view) | Author: STINNER Victor (vstinner) * | Date: 2021-01-11 15:16 | |
I get a crash without any code, just by running gunicorn. It looks like a bug in gunicorn. --- $ python3.8 -m venv env $ env/bin/python -m pip install gunicorn (..) Successfully installed gunicorn-20.0.4 $ ./env/bin/python -X dev -c 'from gunicorn.app.wsgiapp import run; run()' foobar:app ...) [2021-01-11 16:14:11 +0100] [32107] [ERROR] Exception in worker process Traceback (most recent call last): (...) File "/home/vstinner/z/env/lib64/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp return util.import_app(self.app_uri) File "/home/vstinner/z/env/lib64/python3.8/site-packages/gunicorn/util.py", line 358, in import_app mod = importlib.import_module(module) (...) ModuleNotFoundError: No module named 'foobar' [2021-01-11 16:14:11 +0100] [32107] [INFO] Worker exiting (pid: 32107) sys:1: ResourceWarning: unclosed <socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000)> ResourceWarning: Enable tracemalloc to get the object allocation traceback Debug memory block at address p=0x55cfa92154a0: API '1' 3271705103877500672 bytes originally requested The 7 pad bytes at p-7 are not all FORBIDDENBYTE (0xfd): at p-7: 0x00 *** OUCH at p-6: 0x00 *** OUCH at p-5: 0x00 *** OUCH at p-4: 0x00 *** OUCH at p-3: 0x00 *** OUCH at p-2: 0x00 *** OUCH at p-1: 0x00 *** OUCH Because memory is corrupted at the start, the count of bytes requested may be bogus, and checking the trailing pad bytes may segfault. The 8 pad bytes at tail=0x2d67c444d794c3a0 are [2021-01-11 16:14:11 +0100] [32113] [INFO] Booting worker with pid: 32113 (...) --- You should report the issue to gunicorn: https://github.com/benoitc/gunicorn/issues |
|||
msg384843 - (view) | Author: Amirouche Boubekki (amirouche) | Date: 2021-01-11 15:39 | |
> ModuleNotFoundError: No module named 'foobar' That is not a segfault. The problem I am reporting is a segfault. It can be reproduced with uvicorn as follow: from lsm import LSM db = LSM('db.sqlite') async def app(scope, receive, send): assert scope['type'] == 'http' global db for (index, (key, value)) in enumerate(db[b'\x00':b'\xFF']): pass await send({ 'type': 'http.response.start', 'status': 200, 'headers': [ [b'content-type', b'text/plain'], ], }) await send({ 'type': 'http.response.body', 'body': b'Hello, world!', }) db.close() Run the above program with: python -X dev -m uvicorn bobo:app Then in another console: curl http://localhost:8000/ Here is the output: $ python -X dev -m uvicorn bobo:app INFO: Started server process [3580316] INFO: Waiting for application startup. INFO: ASGI 'lifespan' protocol appears unsupported. INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) Fatal Python error: Segmentation fault Current thread 0x00007fbb6e49b740 (most recent call first): File "./bobo.py", line 10 in app File "/home/amirouche/.cache/pypoetry/virtualenvs/lsmdb-cTe2806J-py3.8/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py", line 45 in __call__ File "/home/amirouche/.cache/pypoetry/virtualenvs/lsmdb-cTe2806J-py3.8/lib/python3.8/site-packages/uvicorn/protocols/http/h11_impl.py", line 394 in run_asgi File "/usr/lib/python3.8/asyncio/events.py", line 81 in _run File "/usr/lib/python3.8/asyncio/base_events.py", line 1851 in _run_once File "/usr/lib/python3.8/asyncio/base_events.py", line 570 in run_forever File "/usr/lib/python3.8/asyncio/base_events.py", line 603 in run_until_complete File "/home/amirouche/.cache/pypoetry/virtualenvs/lsmdb-cTe2806J-py3.8/lib/python3.8/site-packages/uvicorn/server.py", line 48 in run File "/home/amirouche/.cache/pypoetry/virtualenvs/lsmdb-cTe2806J-py3.8/lib/python3.8/site-packages/uvicorn/main.py", line 386 in run File "/home/amirouche/.cache/pypoetry/virtualenvs/lsmdb-cTe2806J-py3.8/lib/python3.8/site-packages/uvicorn/main.py", line 362 in main File "/home/amirouche/.cache/pypoetry/virtualenvs/lsmdb-cTe2806J-py3.8/lib/python3.8/site-packages/click/core.py", line 610 in invoke File "/home/amirouche/.cache/pypoetry/virtualenvs/lsmdb-cTe2806J-py3.8/lib/python3.8/site-packages/click/core.py", line 1066 in invoke File "/home/amirouche/.cache/pypoetry/virtualenvs/lsmdb-cTe2806J-py3.8/lib/python3.8/site-packages/click/core.py", line 782 in main File "/home/amirouche/.cache/pypoetry/virtualenvs/lsmdb-cTe2806J-py3.8/lib/python3.8/site-packages/click/core.py", line 829 in __call__ File "/home/amirouche/.cache/pypoetry/virtualenvs/lsmdb-cTe2806J-py3.8/lib/python3.8/site-packages/uvicorn/__main__.py", line 4 in <module> File "/usr/lib/python3.8/runpy.py", line 87 in _run_code File "/usr/lib/python3.8/runpy.py", line 194 in _run_module_as_main Segmentation fault (core dumped) |
|||
msg384845 - (view) | Author: Amirouche Boubekki (amirouche) | Date: 2021-01-11 16:22 | |
I tried to reduce the program by replacing gunicorn / uvicorn dependency with threading.Thread and multiprocess.Pool without success. |
|||
msg384852 - (view) | Author: Amirouche Boubekki (amirouche) | Date: 2021-01-11 18:07 | |
The problem is prolly in lsm-db. ref: https://github.com/coleifer/python-lsm-db/issues/20 Sorry for the noise. |
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-04-11 14:59:40 | admin | set | github: 87057 |
2021-01-11 18:07:31 | amirouche | set | status: open -> closed resolution: third party messages: + msg384852 |
2021-01-11 16:22:17 | amirouche | set | messages: + msg384845 |
2021-01-11 15:39:41 | amirouche | set | status: closed -> open resolution: third party -> (no value) messages: + msg384843 |
2021-01-11 15:16:34 | vstinner | set | status: open -> closed resolution: third party messages: + msg384840 stage: resolved |
2021-01-11 15:01:04 | amirouche | set | messages: + msg384839 |
2021-01-11 14:55:47 | vstinner | set | nosy:
+ vstinner messages: + msg384838 |
2021-01-11 14:48:27 | amirouche | create |