Edgewall Software
Modify

Opened 15 months ago

#13390 new defect

tracd with SQLite crashes when concurrently reloading configuration and sending requests

Reported by: Jun Omae Owned by:
Priority: normal Milestone: next-stable-1.4.x
Component: web frontend Version:
Severity: normal Keywords:
Cc: Branch:
Release Notes:
API Changes:
Internal Changes:

Description

I noticed this issue while investigating #13345.

Session 1

Launch tracd:

$ ~/venv/trac/1.4.2/bin/python -m trac.web.standalone -p 3000 /dev/shm/tracenv-1.4

Session 2

Touch trac.ini repeatedly

>>> def touch_file_endless(filename):
...     while True:
...         os.utime(filename, None)
...         time.sleep(0.1)
...
>>> touch_file_endless('/dev/shm/tracenv-1.4/conf/trac.ini')

Session 3

Concurrently sending requests

$ ab -c2 -n1000000 http://127.0.0.1:3000/tracenv-1.4/wiki/WikiStart

Result

...
127.0.0.1 - - [12/Apr/2021 23:47:32] "GET /tracenv-1.4/wiki/WikiStart HTTP/1.0" 200 -
127.0.0.1 - - [12/Apr/2021 23:47:32] "GET /tracenv-1.4/wiki/WikiStart HTTP/1.0" 200 -
127.0.0.1 - - [12/Apr/2021 23:47:32] "GET /tracenv-1.4/wiki/WikiStart HTTP/1.0" 200 -
Segmentation fault
#0  sqlite3ErrorFinish (db=0x7fffe0062c48, err_code=err_code@entry=25) at sqlite3.c:31372
#1  0x00007ffff39ba6c4 in sqlite3Error (err_code=25, db=<optimized out>) at sqlite3.c:31384
#2  columnMem (pStmt=0x7fffe00643b8, i=<optimized out>) at sqlite3.c:18767
#3  0x00007ffff39c6e1e in sqlite3_column_type (pStmt=0x7fffe00643b8, i=i@entry=0) at sqlite3.c:84404
#4  0x00007ffff39a86c8 in _pysqlite_fetch_one_row (self=self@entry=0x7fffe8ebbcb0) at src/cursor.c:316
#5  0x00007ffff39a9445 in _pysqlite_query_execute (self=0x7fffe8ebbcb0, multiple=0, args=<optimized out>) at src/cursor.c:629
#6  0x00000000004a5a8e in PyObject_Call ()
#7  0x00000000004c620d in PyEval_CallObjectWithKeywords ()
#8  0x0000000000538e5c in ?? ()
#9  0x00000000004a5a8e in PyObject_Call ()
#10 0x00000000004beff5 in PyEval_EvalFrameEx ()
#11 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#12 0x00000000004c2214 in PyEval_EvalFrameEx ()
#13 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#14 0x00000000004d5869 in ?? ()
#15 0x00000000004eed1e in ?? ()
#16 0x00000000004a5a8e in PyObject_Call ()
#17 0x00000000004beff5 in PyEval_EvalFrameEx ()
#18 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#19 0x00000000004c2214 in PyEval_EvalFrameEx ()
#20 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#21 0x00000000004c1ad7 in PyEval_EvalFrameEx ()
#22 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#23 0x00000000004c1ad7 in PyEval_EvalFrameEx ()
#24 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#25 0x00000000004d5869 in ?? ()
#26 0x00000000004eed1e in ?? ()
#27 0x00000000004a5a8e in PyObject_Call ()
#28 0x0000000000549733 in ?? ()
#29 0x00000000004c194f in PyEval_EvalFrameEx ()
#30 0x00000000004c16ff in PyEval_EvalFrameEx ()
#31 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#32 0x00000000004d5869 in ?? ()
#33 0x00000000004ae691 in PyObject_CallFunctionObjArgs ()
#34 0x000000000041ce69 in _PyObject_GenericGetAttrWithDict ()
#35 0x00000000004bc609 in PyEval_EvalFrameEx ()
#36 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#37 0x00000000004c2214 in PyEval_EvalFrameEx ()
#38 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#39 0x00000000004c2214 in PyEval_EvalFrameEx ()
#40 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#41 0x00000000004c1ad7 in PyEval_EvalFrameEx ()
#42 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#43 0x00000000004c2214 in PyEval_EvalFrameEx ()
#44 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#45 0x00000000004c1ad7 in PyEval_EvalFrameEx ()
#46 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#47 0x00000000004c2214 in PyEval_EvalFrameEx ()
#48 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#49 0x00000000004c1ad7 in PyEval_EvalFrameEx ()
#50 0x00000000004c16ff in PyEval_EvalFrameEx ()
#51 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#52 0x00000000004c2214 in PyEval_EvalFrameEx ()
#53 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#54 0x00000000004c2214 in PyEval_EvalFrameEx ()
#55 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#56 0x00000000004d5869 in ?? ()
#57 0x00000000004eed1e in ?? ()
#58 0x00000000004a5a8e in PyObject_Call ()
#59 0x0000000000549733 in ?? ()
#60 0x00000000004c194f in PyEval_EvalFrameEx ()
#61 0x00000000004c16ff in PyEval_EvalFrameEx ()
#62 0x00000000004c16ff in PyEval_EvalFrameEx ()
#63 0x00000000004c16ff in PyEval_EvalFrameEx ()
#64 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#65 0x00000000004d5869 in ?? ()
#66 0x00000000004eed1e in ?? ()
#67 0x00000000004a5a8e in PyObject_Call ()
#68 0x00000000004d9342 in PyInstance_New ()
#69 0x00000000004c194f in PyEval_EvalFrameEx ()
#70 0x00000000004c16ff in PyEval_EvalFrameEx ()
#71 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#72 0x00000000004d59a3 in ?? ()
#73 0x00000000004a5a8e in PyObject_Call ()
#74 0x00000000004beff5 in PyEval_EvalFrameEx ()
#75 0x00000000004c16ff in PyEval_EvalFrameEx ()
#76 0x00000000004c16ff in PyEval_EvalFrameEx ()
#77 0x00000000004b9e36 in PyEval_EvalCodeEx ()
#78 0x00000000004d5869 in ?? ()
#79 0x00000000004eed1e in ?? ()
#80 0x00000000004a5a8e in PyObject_Call ()
#81 0x00000000004c61c0 in PyEval_CallObjectWithKeywords ()
#82 0x0000000000588142 in ?? ()
#83 0x00007ffff7bc16ba in start_thread (arg=0x7fffe8c60700) at pthread_create.c:333
#84 0x00007ffff78f74dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Attachments (0)

Change History (0)

Modify Ticket

Change Properties
Set your email in Preferences
Action
as new The ticket will remain with no owner.
The ticket will be disowned.
as The resolution will be set. Next status will be 'closed'.
The owner will be changed from (none) to anonymous. Next status will be 'assigned'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.