Sometimes my multithreaded application is crashed while creating
sockets. I wrote simple test (attached) that illustrates the problem.
Backtrace is following:
#0 0x0000003b2fa81074 in ?? () from /lib/libc.so.6
#1 0x0000003b2fa7f47a in memmove () from /lib/libc.so.6
#2 0x00007f7b15b3d063 in std::vector<zmq2::socket_base_t*,
std::allocator<zmq2::socket_base_t*>
>::_M_insert_aux(__gnu_cxx::__normal_iterator<zmq2::socket_base_t**,
std::vector<zmq2::socket_base_t*, std::allocator<zmq2::socket_base_t*>
> >, zmq2::socket_base_t* const&) () from /usr/lib/libzmq.so.0
#3 0x00007f7b15b3cec3 in zmq2::app_thread_t::create_socket(int) ()
from /usr/lib/libzmq.so.0
#4 0x00007f7b15b3f793 in zmq2::dispatcher_t::create_socket(int) ()
from /usr/lib/libzmq.so.0
#5 0x00000000004009fa in thread_run (ctx=0x602010) at test3.c:16
#6 0x0000003b30606894 in start_thread () from /lib/libpthread.so.0
#7 0x0000003b2fad0f9d in clone () from /lib/libc.so.6
#8 0x0000000000000000 in ?? ()
Problem is not depending from type of sockets (i tried ZMQ_P2P, ZMQ_PUB).
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cassert>
#include <pthread.h>
#include "zmq.h"
using namespace std;
#define SOCKETS_COUNT 1000
void *thread_run(void *ctx) {
void *s;
for(int i=0;i<SOCKETS_COUNT;i++)
s = zmq_socket (ctx, ZMQ_PUB);
}
#define THREADS_COUNT 30
int main(int argc, char **argv) {
void *ctx = zmq_init (THREADS_COUNT, 1, ZMQ_POLL);
assert (ctx);
pthread_t threads[THREADS_COUNT];
void *s = NULL;
for(int i=0;i<THREADS_COUNT;i++)
pthread_create(&threads[i],NULL,thread_run,ctx);
for(int i=0;i<THREADS_COUNT;i++)
pthread_join(threads[i],NULL);
}_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev