在销毁Socket / ZContext时收割线程中的NPE

时间:2014-04-22 15:32:39

标签: zeromq

为什么我在试图关闭我的ZContext时在收割者线程中获得NPE?

背景:我试图关闭使用ZContext.createSocket(int)创建的ZMQ.Sockets。我开始尝试使用ZMQ.Context,但我在某处读到这是一个低级API,建议使用ZContext。但是现在当我尝试破坏我在测试运行中创建的上下文时,操作错误在收割者线程中出现NPE并且没有成功终止上下文。

我有ZeroMQWorker设置ZLoop并负责关闭为每个组件创建的上下文。我遇到问题的测试是为服务器创建一个新的ZContext,为客户端创建一个。{1}。他们评论了in the tests here

this test中,ctx.term()给出了NPE。将其切换为ZContext只会无缘无故地挂起。

我试图找到在示例中正确关闭上下文的示例,但坦率地说,我无法对其中的大多数做出正面或反面。他们并没有以任何长期Java程序员熟悉的方式命名,他们没有javadoc甚至内联评论来解释发生了什么。到目前为止,我一直在努力学习API的基础知识:做什么 - 通过反复试验找出自己不能做的事情。但这种关闭事情让我完全陷入困境。

编辑:我做了一些更改,现在似乎问题归结为尝试终止上下文。它似乎在Ctx.java

中挂起了这个操作
//  Wait till reaper thread closes all the sockets.
Command cmd = term_mailbox.recv (-1);

0 个答案:

没有答案