Strange problem (maybe: CLSQL thread safety)
Nicolas Neuss <[email protected]> Thu, 02 Dec 2010 16:25:43 +0100
| Newsgroups | gmane.lisp.clsql.general |
|---|---|
| Organization | KIT Karlsruhe |
| Message-ID | <[email protected]> |
Hello,
I am running a Web server based on SBCL/Hunchentoot/clsql-postgresql-socket
which emails me any problems it cannot handle alone. Such reports come
very rarely (at most once a week which is still acceptable given that it is
used quite a lot). Sometimes these reports indicate bugs in may
application which I can correct, sometimes they indicate problems in the
downward toolchain.
Here is a strange problem which might be due to some problems with
thread-safety of the functions CLSQL-SYS::FIND-ALL and
CLSQL-SYS::BUILD-OBJECTS in the file"sql/oodml.lisp". Almost at the same
time I obtained two similar emails indicating that somehow one of my server
threads obtained a slot value which should belong to the other thread (and
maybe also vice versa). Did someone here encounter this problem too? Or
can someone spot where it might arise?
Nicolas
---------------------------------------------------------------------------
Mail 1
---------------------------------------------------------------------------
The value -5 is not of type UNSIGNED-BYTE.
0: (SB-DEBUG::MAP-BACKTRACE #<CLOSURE (LAMBDA #) {BCB29CD}>)[:EXTERNAL]
1: (BACKTRACE 536870911 #<SB-IMPL::STRING-OUTPUT-STREAM {BCB2969}>)
2: (TRIVIAL-BACKTRACE:PRINT-BACKTRACE-TO-STREAM
#<SB-IMPL::STRING-OUTPUT-STREAM {BCB2969}>)
3: (HUNCHENTOOT::GET-BACKTRACE)
4: ((SB-PCL::FAST-METHOD HUNCHENTOOT:MAYBE-INVOKE-DEBUGGER :AFTER (T))
#<unavailable argument>
#<unavailable argument>
#<TYPE-ERROR {BCB1761}>)
5: ((LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0.))
#<unavailable argument>
#<unavailable argument>
#<TYPE-ERROR {BCB1761}>)
6: (SIGNAL #<TYPE-ERROR {BCB1761}>)[:EXTERNAL]
7: (ERROR TYPE-ERROR)[:EXTERNAL]
8: (SB-KERNEL::OBJECT-NOT-TYPE-ERROR-HANDLER
#<unavailable argument>
#.(SB-SYS:INT-SAP #XB515EB60)
#<SB-ALIEN-INTERNALS:ALIEN-VALUE :SAP #XB515E84C :TYPE (*
(STRUCT
SB-VM::OS-CONTEXT-T-STRUCT))>
(206 14))
9: (SB-KERNEL::OBJECT-NOT-TYPE-ERROR-HANDLER
#<unavailable argument>
#.(SB-SYS:INT-SAP #XB515EB60)
#<SB-ALIEN-INTERNALS:ALIEN-VALUE :SAP #XB515E84C :TYPE (*
(STRUCT
SB-VM::OS-CONTEXT-T-STRUCT))>
(206 14))[:EXTERNAL]
10: (SB-KERNEL:INTERNAL-ERROR
#.(SB-SYS:INT-SAP #XB515E84C)
#<unavailable argument>)
11: ("foreign function: #x80645AC")
12: ("foreign function: #x8052A8C")
13: ("foreign function: #x8056A43")
14: ((SB-C::&OPTIONAL-DISPATCH BUTLAST) ("538855") -5)[:EXTERNAL]
15: (CLSQL-SYS::BUILD-OBJECTS
#<unavailable argument>
(#<CLSQL-SYS::STANDARD-DB-CLASS COURSES::TUTORIAL>)
(NIL)
(((#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION TIME>
. #<CLSQL-SYS:SQL-IDENT-ATTRIBUTE TUTORIAL.TIME>)
(#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION COURSES:LOCATION>
. #<CLSQL-SYS:SQL-IDENT-ATTRIBUTE TUTORIAL.LOCATION>)
(#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION COURSES::TUTOR-ID>
. #<CLSQL-SYS:SQL-IDENT-ATTRIBUTE TUTORIAL.TUTOR_ID>)
(#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION COURSES::TUTORIAL-NR>
. #<CLSQL-SYS:SQL-IDENT-ATTRIBUTE TUTORIAL.TUTORIAL_NR>)
(#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION COURSES::EVENT-ID>
. #<CLSQL-SYS:SQL-IDENT-ATTRIBUTE TUTORIAL.EVENT_ID>)
(#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION CLSQL-ENHANCEMENTS:ID>
. #<CLSQL-SYS:SQL-IDENT-ATTRIBUTE TUTORIAL.ID>)))
(NIL)
#<CLSQL-POSTGRESQL-SOCKET:POSTGRESQL-SOCKET-DATABASE localhost/courses/neuss OPEN {ADE1989}>
NIL
T
(NIL))
16: (CLSQL-SYS::FIND-ALL (COURSES::TUTORIAL))[:EXTERNAL]
17: (CLSQL-SYS::FAULT-JOIN-SLOT
#<CLSQL-SYS::STANDARD-DB-CLASS COURSES::TUTOR>
#<COURSES::TUTOR {BAACEF1}>
#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION COURSES::TUTORIALS>)
18: ((SB-PCL::FAST-METHOD SB-MOP:SLOT-VALUE-USING-CLASS
(CLSQL-SYS::STANDARD-DB-CLASS T T))
#<unavailable argument>
#<unavailable argument>
#<unavailable argument>
#<unavailable argument>
#<unavailable argument>)
19: (SLOT-VALUE #<COURSES::TUTOR {BAACEF1}> COURSES::TUTORIALS)
20: (COURSES::TUTOR-STATUS-COURSES-COURSES-SSO-PAGE)
21: ((SB-PCL::FAST-METHOD HUNCHENTOOT:HANDLE-REQUEST
(HUNCHENTOOT:ACCEPTOR HUNCHENTOOT:REQUEST))
#<unavailable argument>
#<unavailable argument>
#<HUNCHENTOOT:ACCEPTOR (host localhost, port 8004)>
#<HUNCHENTOOT:REQUEST {BB2E059}>)
22: ((SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-REQUEST (T))
#<unavailable argument>
#<unavailable argument>
#<HUNCHENTOOT:REQUEST {BB2E059}>)
23: ((SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION
(HUNCHENTOOT:ACCEPTOR T))
#<unavailable argument>
#<unavailable argument>
#<HUNCHENTOOT:ACCEPTOR (host localhost, port 8004)>
#<USOCKET:STREAM-USOCKET {B9EEE69}>)
24: ((SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND
(HUNCHENTOOT:ACCEPTOR T))
#<unavailable argument>
#S(SB-PCL::FAST-METHOD-CALL
:FUNCTION #<FUNCTION #>
:PV NIL
:NEXT-METHOD-CALL NIL
:ARG-INFO (2))
#<HUNCHENTOOT:ACCEPTOR (host localhost, port 8004)>
#<USOCKET:STREAM-USOCKET {B9EEE69}>)
25: ((LAMBDA ()))
26: ((FLET SB-THREAD::WITH-MUTEX-THUNK))
27: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]477))
28: (SB-THREAD::CALL-WITH-MUTEX
#<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK) {B515F225}>
#S(SB-THREAD:MUTEX
:NAME "thread result lock"
:%OWNER #<SB-THREAD:THREAD "Hunchentoot worker (client: 127.0.0.1:54143)" RUNNING {BB155D1}>
:STATE 1)
#<SB-THREAD:THREAD "Hunchentoot worker (client: 127.0.0.1:54143)" RUNNING {BB155D1}>
T)
29: ((LAMBDA ()))
30: ("foreign function: #x80645AC")
31: ("foreign function: #x8052AE1")
32: ("foreign function: #x805BAED")
33: ("foreign function: #xB7FC1F3B")
---------------------------------------------------------------------------
Mail 2
---------------------------------------------------------------------------
junk in string "Do 8:00-9:30"
0: (SB-DEBUG::MAP-BACKTRACE #<CLOSURE (LAMBDA #) {BBF2BBD}>)[:EXTERNAL]
1: (BACKTRACE 536870911 #<SB-IMPL::STRING-OUTPUT-STREAM {BBF2B59}>)
2: (TRIVIAL-BACKTRACE:PRINT-BACKTRACE-TO-STREAM
#<SB-IMPL::STRING-OUTPUT-STREAM {BBF2B59}>)
3: (HUNCHENTOOT::GET-BACKTRACE)
4: ((SB-PCL::FAST-METHOD HUNCHENTOOT:MAYBE-INVOKE-DEBUGGER :AFTER (T))
#<unavailable argument>
#<unavailable argument>
#<SB-INT:SIMPLE-PARSE-ERROR {BBF17C1}>)
5: ((LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0.))
#<unavailable argument>
#<unavailable argument>
#<SB-INT:SIMPLE-PARSE-ERROR {BBF17C1}>)
6: (SIGNAL #<SB-INT:SIMPLE-PARSE-ERROR {BBF17C1}>)[:EXTERNAL]
7: (ERROR SB-INT:SIMPLE-PARSE-ERROR)[:EXTERNAL]
8: (PARSE-INTEGER "Do 8:00-9:30")[:EXTERNAL]
9: ((SB-PCL::FAST-METHOD CLSQL-SYS:DATABASE-SEQUENCE-NEXT
(T CLSQL-SYS:GENERIC-POSTGRESQL-DATABASE))
#<unavailable argument>
#<unavailable argument>
"INSTITUTE_ID_SEQUENCE"
#<CLSQL-POSTGRESQL-SOCKET:POSTGRESQL-SOCKET-DATABASE localhost/courses/neuss OPEN {ADE1989}>)
10: ((FLET SB-PCL::INITIALIZE-SLOT-FROM-INITFUNCTION)
#<CLSQL-SYS::STANDARD-DB-CLASS COURSES:INSTITUTE>
#<COURSES:INSTITUTE {BBEFB41}>
#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION CLSQL-ENHANCEMENTS:ID>)
11: ((SB-PCL::FAST-METHOD SHARED-INITIALIZE (SB-PCL::SLOT-OBJECT T))
#<unavailable argument>
#<unavailable argument>
#<COURSES:INSTITUTE {BBEFB41}>
T)[:EXTERNAL]
12: ((SB-PCL::FAST-METHOD INITIALIZE-INSTANCE (CLSQL-SYS:STANDARD-DB-OBJECT))
#<unavailable argument>
#S(SB-PCL::FAST-METHOD-CALL
:FUNCTION #<FUNCTION # {97DB3ED}>
:PV NIL
:NEXT-METHOD-CALL NIL
:ARG-INFO (1 . T))
#<COURSES:INSTITUTE {BBEFB41}>)[:EXTERNAL]
13: ((SB-PCL::FAST-METHOD INITIALIZE-INSTANCE
(CLSQL-ENHANCEMENTS:REFERENCE-MIXIN))
#<unavailable argument>
#S(SB-PCL::FAST-METHOD-CALL
:FUNCTION #<FUNCTION # {C9E9065}>
:PV NIL
:NEXT-METHOD-CALL #S(SB-PCL::FAST-METHOD-CALL
:FUNCTION #
:PV NIL
:NEXT-METHOD-CALL NIL
:ARG-INFO (1 . T))
:ARG-INFO (1 . T))
#<COURSES:INSTITUTE {BBEFB41}>)[:EXTERNAL]
14: ((SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS))
#<unavailable argument>
#<unavailable argument>
#<CLSQL-SYS::STANDARD-DB-CLASS COURSES:INSTITUTE>)[:EXTERNAL]
15: (CLSQL-SYS::BUILD-OBJECTS
#<unavailable argument>
(#<CLSQL-SYS::STANDARD-DB-CLASS COURSES:INSTITUTE>)
(NIL)
(((#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION COURSES:NAME-BLOCK>
. #<CLSQL-SYS:SQL-IDENT-ATTRIBUTE INSTITUTE.NAME_BLOCK>)
(#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION COURSES::NAME>
. #<CLSQL-SYS:SQL-IDENT-ATTRIBUTE INSTITUTE.NAME>)
(#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION COURSES::UNIVERSITY-ID>
. #<CLSQL-SYS:SQL-IDENT-ATTRIBUTE INSTITUTE.UNIVERSITY_ID>)
(#<CLSQL-SYS::VIEW-CLASS-EFFECTIVE-SLOT-DEFINITION CLSQL-ENHANCEMENTS:ID>
. #<CLSQL-SYS:SQL-IDENT-ATTRIBUTE INSTITUTE.ID>)))
(NIL)
#<CLSQL-POSTGRESQL-SOCKET:POSTGRESQL-SOCKET-DATABASE localhost/courses/neuss OPEN {ADE1989}>
NIL
T
(NIL))
16: (CLSQL-SYS::FIND-ALL (COURSES:INSTITUTE))[:EXTERNAL]
17: (CLSQL-ENHANCEMENTS:SELECT-1 COURSES:INSTITUTE)[:EXTERNAL]
18: (COURSES::SELECT-COURSES-PAGE
:NR
NIL
:TYPE
NIL
:SUBMIT
NIL
:ID
NIL
:SEMESTER
NIL)
19: ((SB-PCL::FAST-METHOD HUNCHENTOOT:HANDLE-REQUEST
(HUNCHENTOOT:ACCEPTOR HUNCHENTOOT:REQUEST))
#<unavailable argument>
#<unavailable argument>
#<HUNCHENTOOT:ACCEPTOR (host localhost, port 8000)>
#<HUNCHENTOOT:REQUEST {BB4C5A9}>)
20: ((SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-REQUEST (T))
#<unavailable argument>
#<unavailable argument>
#<HUNCHENTOOT:REQUEST {BB4C5A9}>)
21: ((SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION
(HUNCHENTOOT:ACCEPTOR T))
#<unavailable argument>
#<unavailable argument>
#<HUNCHENTOOT:ACCEPTOR (host localhost, port 8000)>
#<USOCKET:STREAM-USOCKET {BB326F1}>)
22: ((SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND
(HUNCHENTOOT:ACCEPTOR T))
#<unavailable argument>
#S(SB-PCL::FAST-METHOD-CALL
:FUNCTION #<FUNCTION #>
:PV NIL
:NEXT-METHOD-CALL NIL
:ARG-INFO (2))
#<HUNCHENTOOT:ACCEPTOR (host localhost, port 8000)>
#<USOCKET:STREAM-USOCKET {BB326F1}>)
23: ((LAMBDA ()))
24: ((FLET SB-THREAD::WITH-MUTEX-THUNK))
25: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]477))
26: (SB-THREAD::CALL-WITH-MUTEX
#<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK) {B48CE225}>
#S(SB-THREAD:MUTEX
:NAME "thread result lock"
:%OWNER #<SB-THREAD:THREAD "Hunchentoot worker (client: 127.0.0.1:51191)" RUNNING {BB36051}>
:STATE 1)
#<SB-THREAD:THREAD "Hunchentoot worker (client: 127.0.0.1:51191)" RUNNING {BB36051}>
T)
27: ((LAMBDA ()))
28: ("foreign function: #x80645AC")
29: ("foreign function: #x8052AE1")
30: ("foreign function: #x805BAED")
31: ("foreign function: #xB7FC1F3B")