Remove event queue when a new task is initiated. Also remove events
[yaz-moved-to-github.git] / src / zoom-c.c
index 868044e..03d0e55 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (C) 1995-2007, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: zoom-c.c,v 1.112 2007-02-21 09:17:51 adam Exp $
+ * $Id: zoom-c.c,v 1.114 2007-02-21 12:53:01 adam Exp $
  */
 /**
  * \file zoom-c.c
@@ -120,6 +120,13 @@ static ZOOM_Event ZOOM_connection_get_event(ZOOM_connection c)
     return event;
 }
 
+static void ZOOM_connection_remove_events(ZOOM_connection c)
+{
+    ZOOM_Event event;
+    while ((event = ZOOM_connection_get_event(c)))
+        ZOOM_Event_destroy(event);
+}
+
 ZOOM_API(int) ZOOM_connection_peek_event(ZOOM_connection c)
 {
     ZOOM_Event event = c->m_queue_front;
@@ -127,6 +134,8 @@ ZOOM_API(int) ZOOM_connection_peek_event(ZOOM_connection c)
     return event ? event->kind : ZOOM_EVENT_NONE;
 }
 
+void ZOOM_connection_remove_tasks(ZOOM_connection c);
+
 static void set_dset_error(ZOOM_connection c, int error,
                            const char *dset,
                            const char *addinfo, const char *addinfo2)
@@ -172,7 +181,6 @@ static void set_HTTP_error(ZOOM_connection c, int error,
 }
 #endif
 
-void ZOOM_connection_remove_tasks(ZOOM_connection c);
 
 static void set_ZOOM_error(ZOOM_connection c, int error,
                            const char *addinfo)
@@ -189,6 +197,8 @@ static void clear_error(ZOOM_connection c)
      * or Init Refused are not cleared, because they are not
      * recoverable: doing another search doesn't help.
      */
+
+    ZOOM_connection_remove_events(c);
     switch (c->error)
     {
     case ZOOM_ERROR_CONNECT:
@@ -706,6 +716,7 @@ ZOOM_API(void)
     odr_destroy(c->odr_out);
     ZOOM_options_destroy(c->options);
     ZOOM_connection_remove_tasks(c);
+    ZOOM_connection_remove_events(c);
     xfree(c->host_port);
     xfree(c->path);
     xfree(c->proxy);
@@ -1274,7 +1285,7 @@ static zoom_ret ZOOM_connection_send_init(ZOOM_connection c)
                     odr_prepend(c->odr_out, "ZOOM-C",
                                 ireq->implementationName));
     
-    version = odr_strdup(c->odr_out, "$Revision: 1.112 $");
+    version = odr_strdup(c->odr_out, "$Revision: 1.114 $");
     if (strlen(version) > 10)   /* check for unexpanded CVS strings */
         version[strlen(version)-2] = '\0';
     ireq->implementationVersion =