Index: /trunk/source/objc-bridge/objc-support.lisp
===================================================================
--- /trunk/source/objc-bridge/objc-support.lisp	(revision 14461)
+++ /trunk/source/objc-bridge/objc-support.lisp	(revision 14462)
@@ -48,6 +48,11 @@
         (incf n)))))
 
+
 (defun %note-protocol (p)
-  (with-macptrs ((cname (objc-message-send p "name" :address)))
+  ;; In Cocotron (which is ultimately based on the GNU ObjC runtime),
+  ;; it may be the case that some Protocol objects aren't fully initialized
+  ;; when this code runs, hence the sleazy use of PREF here.
+  (with-macptrs ((cname #+cocotron-objc (pref p #>Protocol.nameCString)
+                        #-cocotron-objc (objc-message-send p "name" :address)))
     (let* ((namelen (%cstrlen cname))
            (name (make-string namelen)))
@@ -64,5 +69,5 @@
 
 (defun note-class-protocols (class)
-  #-(or apple-objc-2.0 cocotron-objc)
+  #-(or apple-objc-2.0)
   (do* ((protocols (pref class :objc_class.protocols)
                    (pref protocols :objc_protocol_list.next)))
@@ -73,5 +78,5 @@
           (with-macptrs ((p (paref list (:* (:* (:struct :<P>rotocol))) i)))
             (%note-protocol p))))))
-  #+(or apple-objc-2.0 cocotron-objc)
+  #+(or apple-objc-2.0)
   (rlet ((p-out-count :int 0))
     (with-macptrs ((protocols (#_class_copyProtocolList class p-out-count)))
