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