I am using the following code to connect to a socket, however when I exit
the application not all the threads exit. Lot of the threads are waiting,
Is there a better way to cleanly exit the application?

"Thread-6" prio=10 tid=0x00007f0f043d8800 nid=0xff9 runnable
[0x00007f0ef04ab000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
        at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
        at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
        - locked <0x0000000093b1f0a8> (a sun.nio.ch.Util$2)
        - locked <0x0000000093b1f098> (a
java.util.Collections$UnmodifiableSet)
        - locked <0x0000000093b1efb8> (a sun.nio.ch.EPollSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
        at zmq.Signaler.wait_event(Signaler.java:135)
        at zmq.Mailbox.recv(Mailbox.java:105)

ZMQ.Socket socket = sockets.get();

*if* (*null* == socket) {

socket = context.socket(ZMQ.*REP*);

sockets.set(socket);

}

socket.connect(jmsUrl);

 *while* (*true*) {

 // Wait for next request from client (C string)

 *try* {

String request = socket.recvStr(0);

*log*.info(Thread.*currentThread*().getName());

 // Do some 'work'

String response = *null*;

response = doWork(request);

 // Send reply back to client (C string)

socket.send(response, 0);

 } *catch* (ZMQException e) {

*if* (e.getErrorCode() == ZMQ.Error.*ETERM*.getCode()) {

*log*.warn("Exiting", e);

*break*;

}*else*{

*log*.error("Unable to send request", e);

}

}

}

*public* *void* cleanUp() {

*log*.info("Close Called");

 ZMQ.Socket socket = sockets.get();

*if* (*null* != socket) {

socket.close();

}

*this*.context.term();

 }
_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to