|
From: james a. <jam...@se...> - 2011-09-11 18:48:07
|
good evening; on several occasions in the recent past, i have observed a type test of the form (TYPEP CHANNEL 'AMQP:CHANNEL) to return false, when the respective 'channel' value was, as indicated by the stack trace, ostensibly of the specified type. this occurs after an image has been running for varying lengths of time - sometimes minutes, sometimes hours. i now suspect, it occasionally triggers an aver. the error message at such a point is of the form Error at toplevel: SHARED-INITIALIZE: the CHANNEL argument (#<AMQP-1-1-0-9-1:CHANNEL [#<PURI:URI amqp://hetzner.dydra.com/>].1 {10091BBCF1}>) must be of type AMQP:CHANNEL.. despite that * (sb-mop:class-precedence-list (find-class 'AMQP-1-1-0-9-1:CHANNEL)) (#<STANDARD-CLASS AMQP-1-1-0-9-1:CHANNEL> #<STANDARD-CLASS AMQP-1-1-0-9-1:OBJECT> #<STANDARD-CLASS AMQP:CHANNEL> #<STANDARD-CLASS DE.SETF.AMQP.IMPLEMENTATION::AMQP-CONNECTED-OBJECT> #<STANDARD-CLASS AMQP:OBJECT> #<STANDARD-CLASS DE.SETF.AMQP.UTILITY:AMQP-CONNECTION-DEVICE> #<STANDARD-CLASS DE.SETF.AMQP.UTILITY:AMQP-DEVICE> #<STANDARD-CLASS SB-SIMPLE-STREAMS:DUAL-CHANNEL-SIMPLE-STREAM> #<STANDARD-CLASS SB-SIMPLE-STREAMS:SIMPLE-STREAM> #<STANDARD-CLASS STANDARD-OBJECT> #<SB-PCL::SLOT-CLASS SB-PCL::SLOT- OBJECT> #<BUILT-IN-CLASS STREAM> #<BUILT-IN-CLASS T>) * and the equivalent appears for class-of the respective channel variable value in that dynamic context. i have seen what now appear to be related errors in the past, to the effect, that an (aver (< i 2)) failed, but not known which site it was. this time, i traced the operation of typep through to classoid- typep, and observed that the function contains one such aver. when tracing at a time when the error occurs, it was the case, that classoid-typep would return nil for a typep call although the precedence list was as illustrated above. my attempt to follow the workings of classoid-typep was confounded by the variations in class instances, designators, and wrappers upon which it operates, but it appeared that it was presented with one form of the amqp:channel class, but expected some other. there is no intentional class re-definition in the running system. once it is loaded this class hierarchy does not change. is there some way in which the various class instances, designators, and wrappers can evolve into a state where they are not synchronized? can anyone can suggest what one might check, trace, or gather as background information to explain what is happening here? thanks, |