Hello ZeroMQ Devs,
I'm currently running into an issue with ZMQ, using CLRZMQ (Win7, VS2010), 
where it is crashing in the encoder::get_data function at this line:

memcpy (buffer + pos, write_pos, to_copy);

The variable write_pos would equal 0xfeeefeee, which according to what I've 
researched, means that the pointer was last touched by Window's HeapFree 
function [1]. Looking into the code I've found that this variable is set with 
the address from the msg_content_t::*data variable. This is then cleaned up in 
zmq_msg_close:

if (content->ffn)
    content->ffn (content->data, content->hint);
free (content);

I've attempted to add a function call in zmq::encoder_t::message_ready to a 
function called zmq_CheckForFreedData to try and fix the problem.

bool zmq_CheckForFreedData(zmq_msg_t *msg_)
{
       if (msg_->content == (zmq::msg_content_t*) ZMQ_VSM)
        return false;
       if (msg_->content == (zmq::msg_content_t*) ZMQ_DELIMITER)
        return false;

       if(((zmq::msg_content_t*) msg_->content)->data == (void *)0xfeeefeee)
       {
              return true;
       }
       return false;
}

...
if (!source || !source->read (&in_progress))
{
       zmq_msg_init (&in_progress);
       return false;
}
else if(zmq_CheckForFreedData(&in_progress))
{
       zmq_msg_init (&in_progress);
       return false;
}
...

While this prevents the crash I'm now seeing my  program lock up. At the moment 
I don't have a simple test program for you, however, until I have the chance to 
put one together, what would be the best place to start looking for why this 
error is happening in the code?

Thank you,
Aaron


1.       
http://stackoverflow.com/questions/127386/in-visual-studio-c-what-are-the-memory-allocation-representations
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to