[armedbear-devel] The value :LONG is not of type (MEMBER NIL :BOOLEAN)

Chun Tian (binghe) binghe.lisp at gmail.com
Mon Mar 21 09:00:44 UTC 2011


Hi, Mark

The problem definition in the pdu.lisp is this two:

#-portable-threads
(defmethod generate-request-id ((pdu common-pdu))
  (with-slots (request-id-counter) pdu
    (the (unsigned-byte 32)
         (logand (incf request-id-counter) #xffffffff))))

#+portable-threads
(defmethod generate-request-id ((pdu common-pdu))
  (with-slots (request-id-counter) pdu
    (the (unsigned-byte 32)
         (logand (portable-threads:atomic-incf request-id-counter) #xffffffff))))

The only difference between two versions, is the use of INCF being replaced to ATOMIC-INCF, which is a thread-safe version of INCF.

If I always use the first version in ABCL (there's another similar method in message.lisp), than ABCL can pass this, and directly goes to the second issue (it's definitely CLOS related, I think)...

I wrote some basic extension code for GBBopen's portable-threads.lisp to support threading in ABCL (no cond var), and the form 

	(portable-threads:atomic-incf request-id-counter)

will be macro-expanded into

	(PORTABLE-THREADS:AS-ATOMIC-OPERATION (INCF REQUEST-ID-COUNTER 1))

then

	(PORTABLE-THREADS:WITH-LOCK-HELD (PORTABLE-THREADS::*ATOMIC-OPERATION-LOCK*) (INCF REQUEST-ID-COUNTER 1)) 

and then (simplified)

        (THREADS:WITH-MUTEX (PORTABLE-THREADS::*ATOMIC-OPERATION-LOCK*)
          (INCF REQUEST-ID-COUNTER 1))

Consider ATOMIC-INCF itself works just right. I think maybe ABCL compiler cannot handle a macro form inside method definition quite well, shouldn't be CLOS/MOP's fault.

Hope this helps.

Regards,

Chun Tian (binghe)

在 2011-3-21,00:17, Mark Evenson 写道:

> On 3/20/11 4:52 PM, Chun Tian (binghe) wrote:
> 
> […]
>> Now I need help.  If one could spend 5 minutes do a SVN checkout of
>> the release branch:
>> 
>> https://cl-net-snmp.svn.sourceforge.net/svnroot/cl-net-snmp/snmp/branches/6
>> 
>> and try to ASDF load it (you'll need usocket 0.5 and ironclad), two
>> major CLOS bug of ABCL will show up, one is at "pdu.lisp", as what
>> the mail title said, The value :LONG is not of type (MEMBER NIL
>> :BOOLEAN).
> 
> I have reproduced your error with ABCL trunk.
> 
>> I have no idea how to fix it.
> 
> It is not immediately clear whether this is actually CLOS or the 
> compiler, as the file seems to eval without errors.  We'll need a little 
> time to investigate but hopefully we'll have you on your way to SNMP 
> land in Java via CL in no time…
> 
> Thanks for the bug report.
> 
> -- 
> "A screaming comes across the sky.  It has happened before, but there
> is nothing to compare to it now."
> 
> _______________________________________________
> armedbear-devel mailing list
> armedbear-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel





More information about the armedbear-devel mailing list