X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fyaz-socket-manager.cpp;h=0a3797a6cdff764575e2563ef8f06936903ce79f;hb=e1563004f70ed8be4549db0ba3a20de902f98d4c;hp=c3fc4919f91e8715caf85baee2fd4bc3f8b8b0a4;hpb=1d58071894904fae50f6c577963dbfd4c9b83062;p=yazpp-moved-to-github.git diff --git a/src/yaz-socket-manager.cpp b/src/yaz-socket-manager.cpp index c3fc491..0a3797a 100644 --- a/src/yaz-socket-manager.cpp +++ b/src/yaz-socket-manager.cpp @@ -32,7 +32,7 @@ SocketManager::SocketEntry **SocketManager::lookupObserver( ISocketObserver *observer) { SocketEntry **se; - + for (se = &m_observers; *se; se = &(*se)->next) if ((*se)->observer == observer) break; @@ -81,7 +81,7 @@ void SocketManager::deleteObserver(ISocketObserver *observer) void SocketManager::deleteObservers() { SocketEntry *se = m_observers; - + while (se) { SocketEntry *se_next = se->next; @@ -150,7 +150,7 @@ void SocketManager::inspect_poll_result(int res, struct yaz_poll_fd *fds, if (output_mask & yaz_poll_except) mask |= SOCKET_OBSERVE_EXCEPT; - + if (mask) { SocketEvent *event = new SocketEvent; @@ -172,7 +172,7 @@ void SocketManager::inspect_poll_result(int res, struct yaz_poll_fd *fds, event->event = SOCKET_OBSERVE_TIMEOUT; putEvent (event); no_put_events++; - + } } SocketEvent *event = getEvent(); @@ -241,7 +241,7 @@ int SocketManager::processEvent() if (timeout == -1 || timeout_this < timeout) timeout = timeout_this; p->timeout_this = timeout_this; - yaz_log (m_log, "SocketManager::select timeout_this=%d", + yaz_log (m_log, "SocketManager::select timeout_this=%d", p->timeout_this); } else @@ -253,7 +253,10 @@ int SocketManager::processEvent() while ((res = yaz_poll(fds, no_fds, timeout, 0)) < 0 && pass < 10) { if (errno == EINTR) - continue; + { + delete [] fds; + return 1; + } yaz_log(YLOG_ERRNO|YLOG_WARN, "yaz_poll"); yaz_log(YLOG_WARN, "errno=%d timeout=%d", errno, timeout); }