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")