[zeromq-dev] OUT OF MEMORY on Win using inproc transport

Dimiter 'malkia' Stanev malkia at gmail.com
Thu Jan 19 03:54:24 CET 2012


I'm using latest libzmq-3.1.0 so some of the functions changed a bit.

I'm also a "C" coder more than "C++", and never used boost, but that to 
be said, this example did not ever made problem for me:

I was using my own built zmq.dll from luajit ffi bindings that I keep:
https://github.com/malkia/ufo/tree/master/bin/Windows/x86

// file: a.c
// compile with: cl -O2 -MD a.c
// I'm using Windows WDK 7.1, but Windows SDK 7.1, or Visual Studio 
prompt should work too

#include <process.h>
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include "..\..\..\..\libzmq\include\zmq.h"

#pragma comment(lib,"zmq")

#define INTERNAL_DATA_SOCKET "inproc://data"
#define MESSAGE  "{\"m_t\": 0, \"data\": {}}"

void *context;
static char msg[] = MESSAGE;

unsigned __stdcall outputWorker(void*);

int main(int argc, char* argv[]) {
	void* intDataSocket;
	int messagesToStore = 1;
	
         context = zmq_init(1);
	_beginthreadex(NULL, 0, outputWorker, NULL, 0, NULL);

         intDataSocket = zmq_socket(context, ZMQ_PUB);
	printf("intDataSocket=%d\n",intDataSocket);
         printf("zmq_connect=%d\n",zmq_connect(intDataSocket, 
INTERNAL_DATA_SOCKET));
         printf("zmq_setsockopt=%d\n",zmq_setsockopt(intDataSocket, 
ZMQ_SNDHWM, &messagesToStore, sizeof(messagesToStore)));
         printf("zmq_setsockopt=%d\n",zmq_setsockopt(intDataSocket, 
ZMQ_RCVHWM, &messagesToStore, sizeof(messagesToStore)));

         while(1) {
                 int rc = zmq_send(intDataSocket, msg, sizeof(msg), 0);
                 assert(rc == sizeof(msg));
         }
         return 0;
}

unsigned __stdcall outputWorker(void*a) {
         void *intDataSocket = zmq_socket(context, ZMQ_SUB);
         printf("zmq_bind=%d\n",zmq_bind(intDataSocket, 
INTERNAL_DATA_SOCKET));
         printf("zmq_setsockopt=%d\n",zmq_setsockopt(intDataSocket, 
ZMQ_SUBSCRIBE, "", 0));

         while(1) {
		char buf[sizeof(msg)];
                 int rc = zmq_recv(intDataSocket, buf, sizeof(buf), 0);
		assert(rc = sizeof(buf));
         }
	
	return 0;
}

On 1/18/2012 4:24 PM, Serg Gulko wrote:
> Correction - lines 59, 60 and 62
>
> On Wed, Jan 18, 2012 at 7:07 PM, Serg Gulko <s.gulko at gmail.com
> <mailto:s.gulko at gmail.com>> wrote:
>
>     Hello!
>
>     Thanks for hint, I really was using HWM incorrectly. I changed it
>     according spec but problem is still here..
>
>     http://pastebin.com/tDFpbhM0
>
>
>     But when I commented any operations on subscriber part(lines 68, 69,
>     70 and 71) everything working without problems.
>
>     Serg
>     On Wed, Jan 18, 2012 at 3:46 PM, Chuck Remes <cremes.devlist at mac.com
>     <mailto:cremes.devlist at mac.com>> wrote:
>
>
>         On Jan 18, 2012, at 2:32 PM, Serg Gulko wrote:
>
>          > Yes, in this example I using constant size message(22 bytes)
>         - I want keep only one 22 bytes message.
>          > Or I wrong?
>
>         You are wrong. For HWM, you pass the *number of messages*. What
>         your code does is pass the *number of bytes*. That is incorrect.
>
>         Change it to set the HWM to 1. There are lots of C code examples
>         in the guide. Refer to one of those examples for the exact syntax.
>
>         cr
>
>         _______________________________________________
>         zeromq-dev mailing list
>         zeromq-dev at lists.zeromq.org <mailto:zeromq-dev at lists.zeromq.org>
>         http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
>
>
>
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev



More information about the zeromq-dev mailing list