diff --git a/src/socket_poller.cpp b/src/socket_poller.cpp
index 16fd9b8d243552dabfbdb70a66fb28d3a1de4b16..189430ff9cd436d2800ce21e78a3b531c12d00a6 100644
--- a/src/socket_poller.cpp
+++ b/src/socket_poller.cpp
@@ -43,6 +43,16 @@ zmq::socket_poller_t::~socket_poller_t ()
     //  Mark the socket_poller as dead
     tag = 0xdeadbeef;    
 
+    for (events_t::iterator it = events.begin(); it != events.end(); ++it) {
+        if (it->socket) {
+            int thread_safe;
+            size_t thread_safe_size = sizeof(int);
+
+            if (zmq_getsockopt(it->socket, ZMQ_THREAD_SAFE, &thread_safe, &thread_safe_size) == 0 && thread_safe)
+                zmq_remove_pollfd(it->socket, pollfd);                              			   		
+        }
+    }
+
     zmq_pollfd_close (pollfd);
 
     if (poll_set) {