zmq quick patch added by zbigniew the irascible on Wed Jul 6 20:25:25 2011

Index: zmq.scm
===================================================================
--- zmq.scm	(revision 24332)
+++ zmq.scm	(working copy)
@@ -133,19 +133,25 @@
 
 (define (initialize-message message #!optional data)
   (if (zero? (if data
-                 (let ((data (object-evict data))) ;; only works for non-immediate objects
-                   ((foreign-lambda int
-                                    zmq_msg_init_data
-                                    message
-                                    c-pointer
-                                    unsigned-int
-                                    c-pointer
-                                    c-pointer)
-                    message
-                    (location data)
-                    (number-of-bytes data)
-                    #f
-                    #f))
+                 (begin
+                  (unless (or (string? data) (blob? data))
+                    (type-error data "string or blob"))
+                  (let* ((len (number-of-bytes data))
+                         (cdata (allocate len)))
+                    ((foreign-lambda void "C_memcpy" c-pointer scheme-pointer int)
+                     cdata data len)
+                    ((foreign-lambda int
+                                     zmq_msg_init_data
+                                     message
+                                     c-pointer
+                                     unsigned-int
+                                     c-pointer
+                                     c-pointer)
+                     message
+                     cdata
+                     len
+                     (foreign-value "C_free" c-pointer)
+                     #f)))
                  ((foreign-lambda int zmq_msg_init message) message)))
       message
       (zmq-error 'initialize-message)))
@@ -420,4 +426,4 @@
         (if (= result -1)
             (zmq-error 'poll)
             result))))
-)
\ No newline at end of file
+)