[Trac-tickets] Re: [The Trac Project] #2170: Crash while doing a
login/logout in the Timeline
The Trac Project
noreply at edgewall.com
Tue Oct 4 12:22:24 CDT 2005
#2170: Crash while doing a login/logout in the Timeline
----------------------+-----------------------------------------------------
Reporter: cboos | Owner: cboos
Type: defect | Status: assigned
Priority: high | Milestone: 0.9
Component: general | Version: devel
Severity: critical | Resolution:
Keywords: |
----------------------+-----------------------------------------------------
Changes (by cboos):
* status: new => assigned
* owner: jonas => cboos
Old description:
> This is somehow reproductible, though I got slightly different stack
> traces
> each time.
> But it always bombs in `connection_commit`, though.
>
> Configuration:
> * tracd on Linux
> * python 2.3.4
> * pysqlite 2.0.4 with sqlite 3.2.7.
>
> With older versions of pysqlite, I got simply dead-locks, but this was
> not a good thing either...
>
> Here's the stack trace:
> {{{
> dserver.bct.de - - [04/Oct/2005 15:59:05] "GET /stable-bct-trac/login
> HTTP/1.1" 401 -
> [New Thread 557091 (LWP 12565)]
> Trac[session] DEBUG: Promoting anonymous session 90d7a758b262bd4e88eced41
> to authenticated session for user cboos
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 557091 (LWP 12565)]
> 0x40582056 in pysqlite_sleep (seconds=-21474836.48) at src/util.c:37
> 37 Py_DECREF(ret);
> (gdb)
> (gdb)
> (gdb) bt
> #0 0x40582056 in pysqlite_sleep (seconds=-21474836.48) at src/util.c:37
> #1 0x4058222d in _sqlite_step_with_busyhandler (statement=0x8550dc8,
> _connection=0x4084e988) at src/util.c:86
> #2 0x4057d940 in connection_commit (self=0x4084e988, args=0x0) at
> src/connection.c:230
> #3 0x080c0c42 in call_function (pp_stack=0x45363450, oparg=0) at
> Python/ceval.c:3425
> #4 0x080bd5d4 in eval_frame (f=0x844ee8c) at Python/ceval.c:2116
> #5 0x080c102c in fast_function (func=0x40839e44, pp_stack=0x453635d0,
> n=2, na=2, nk=0) at Python/ceval.c:3518
> #6 0x080c0e46 in call_function (pp_stack=0x453635d0, oparg=1) at
> Python/ceval.c:3458
> #7 0x080bd5d4 in eval_frame (f=0x84b675c) at Python/ceval.c:2116
> ...
> }}}
>
> pyframe points to `_do_login`, in source:trunk/trac/web/auth.py at 2326#L119
New description:
This is somehow reproductible, though I got slightly different stack
traces
each time.
But it always bombs in `connection_commit`, though.
Configuration:
* tracd on Linux
* python 2.3.4
* pysqlite 2.0.4 with sqlite 3.2.7.
With older versions of pysqlite, I got simply dead-locks, but this was
not a good thing either...
Here's the stack trace:
{{{
dserver.bct.de - - [04/Oct/2005 15:59:05] "GET /stable-bct-trac/login
HTTP/1.1" 401 -
[New Thread 557091 (LWP 12565)]
Trac[session] DEBUG: Promoting anonymous session 90d7a758b262bd4e88eced41
to authenticated session for user cboos
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 557091 (LWP 12565)]
0x40582056 in pysqlite_sleep (seconds=-21474836.48) at src/util.c:37
37 Py_DECREF(ret);
(gdb)
(gdb)
(gdb) bt
#0 0x40582056 in pysqlite_sleep (seconds=-21474836.48) at src/util.c:37
#1 0x4058222d in _sqlite_step_with_busyhandler (statement=0x8550dc8,
_connection=0x4084e988) at src/util.c:86
#2 0x4057d940 in connection_commit (self=0x4084e988, args=0x0) at
src/connection.c:230
#3 0x080c0c42 in call_function (pp_stack=0x45363450, oparg=0) at
Python/ceval.c:3425
#4 0x080bd5d4 in eval_frame (f=0x844ee8c) at Python/ceval.c:2116
#5 0x080c102c in fast_function (func=0x40839e44, pp_stack=0x453635d0,
n=2, na=2, nk=0) at Python/ceval.c:3518
#6 0x080c0e46 in call_function (pp_stack=0x453635d0, oparg=1) at
Python/ceval.c:3458
#7 0x080bd5d4 in eval_frame (f=0x84b675c) at Python/ceval.c:2116
...
}}}
pyframe points to `_do_login`, in source:trunk/trac/web/auth.py at 2326#L119
Comment:
I just filled [http://initd.org/tracker/pysqlite/ticket/124
pysqlite:ticket:124],
which contains some additional explanations about the issue: in short, we
have to use 10 and not 10000 for the timeout value when using pysqlite2:
{{{
#!diff
Index: db.py
===================================================================
--- db.py (revision 2326)
+++ db.py (working copy)
@@ -254,8 +254,8 @@
'directory it is located in.' \
% (getuser(), path)
- timeout = int(params.get('timeout', 10000))
if have_pysqlite == 2:
+ timeout = int(params.get('timeout', 10)) # 10 seconds
# Convert unicode to UTF-8 bytestrings. This is case-
sensitive, so
# we need two converters
sqlite.register_converter('text', str)
@@ -264,6 +264,7 @@
cnx = sqlite.connect(path,
detect_types=sqlite.PARSE_DECLTYPES,
check_same_thread=False,
timeout=timeout)
else:
+ timeout = int(params.get('timeout', 10000)) # 10 seconds
cnx = sqlite.connect(path, timeout=timeout)
ConnectionWrapper.__init__(self, cnx)
}}}
--
Ticket URL: <http://projects.edgewall.com/trac/ticket/2170>
The Trac Project <http://trac.edgewall.com/>
More information about the Trac-Tickets
mailing list