use NULL as flag for evaluation of query, ensure we pass non-NULL for reply_block...
[oweals/gnunet.git] / src / util / service_new.c
index 744adc387dff2f3324e899ba7f09aeb325b7d697..8d654c0cbda81591f9edcac1255636520f5df0d7 100644 (file)
@@ -390,6 +390,14 @@ service_main (void *cls)
     GNUNET_SCHEDULER_add_shutdown (&service_shutdown,
                                    sh);
   GNUNET_SERVICE_resume (sh);
+
+  if (-1 != sh->ready_confirm_fd)
+  {
+    GNUNET_break (1 == WRITE (sh->ready_confirm_fd, ".", 1));
+    GNUNET_break (0 == CLOSE (sh->ready_confirm_fd));
+    sh->ready_confirm_fd = -1;
+  }
+
   if (NULL != sh->service_init_cb)
     sh->service_init_cb (sh->cb_cls,
                         sh->cfg,
@@ -1974,6 +1982,10 @@ do_send (void *cls)
       return;
     }
   }
+  if (0 == client->msg_pos)
+  {
+    GNUNET_MQ_impl_send_in_flight (client->mq);
+  }
   client->msg_pos += ret;
   if (left > ret)
   {
@@ -2026,9 +2038,10 @@ service_mq_cancel (struct GNUNET_MQ_Handle *mq,
 {
   struct GNUNET_SERVICE_Client *client = impl_state;
 
-  GNUNET_assert (0); // not implemented
-  // FIXME: stop transmission! (must be possible, otherwise
-  // we must have told MQ that the message was sent!)
+  GNUNET_assert (0 == client->msg_pos);
+  client->msg = NULL;
+  GNUNET_SCHEDULER_cancel (client->send_task);
+  client->send_task = NULL;
 }
 
 
@@ -2190,9 +2203,10 @@ start_client (struct GNUNET_SERVICE_Handle *sh,
                                               client);
   client->mst = GNUNET_MST_create (&service_client_mst_cb,
                                   client);
-  client->user_context = sh->connect_cb (sh->cb_cls,
-                                         client,
-                                         client->mq);
+  if (NULL != sh->connect_cb)
+    client->user_context = sh->connect_cb (sh->cb_cls,
+                                           client,
+                                           client->mq);
   GNUNET_MQ_set_handlers_closure (client->mq,
                                   client->user_context);
   client->recv_task
@@ -2512,9 +2526,10 @@ GNUNET_SERVICE_client_drop (struct GNUNET_SERVICE_Client *c)
   GNUNET_CONTAINER_DLL_remove (sh->clients_head,
                                sh->clients_tail,
                                c);
-  sh->disconnect_cb (sh->cb_cls,
-                     c,
-                     c->user_context);
+  if (NULL != sh->disconnect_cb)
+    sh->disconnect_cb (sh->cb_cls,
+                       c,
+                       c->user_context);
   if (NULL != c->warn_task)
   {
     GNUNET_SCHEDULER_cancel (c->warn_task);