- sock->destroy_task = GNUNET_SCHEDULER_NO_TASK;
- GNUNET_assert (sock->dns_active == NULL);
- if (0 != (sock->ccs & COCO_TRANSMIT_READY))
- {
-#if DEBUG_CONNECTION
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Destroy waits for CCS-TR to be done (%p)\n", sock);
-#endif
- sock->ccs |= COCO_DESTROY_CONTINUATION;
- return;
- }
- if (sock->write_task != GNUNET_SCHEDULER_NO_TASK)
- {
-#if DEBUG_CONNECTION
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Destroy waits for write_task to be done (%p)\n", sock);
-#endif
- GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->destroy_task);
- sock->destroy_task
- = GNUNET_SCHEDULER_add_after (sock->write_task,
- &destroy_continuation, sock);
- return;
- }
- if (0 != (sock->ccs & COCO_RECEIVE_AGAIN))
- {
- sock->ccs |= COCO_DESTROY_CONTINUATION;
- return;
- }
- if (sock->sock != NULL)
- {
-#if DEBUG_CONNECTION
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Shutting down socket (%p)\n", sock);
-#endif
- if (sock->persist != GNUNET_YES)
- {
- if ( (GNUNET_YES != GNUNET_NETWORK_socket_shutdown (sock->sock, SHUT_RDWR)) &&
- (errno != ENOTCONN) &&
- (errno != ECONNRESET) )
- GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "shutdown");
- }
- }
- if (sock->read_task != GNUNET_SCHEDULER_NO_TASK)
- {
- GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->destroy_task);
- sock->destroy_task
- = GNUNET_SCHEDULER_add_after (sock->read_task,
- &destroy_continuation, sock);
- return;
- }
-#if DEBUG_CONNECTION
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Destroy actually runs (%p)!\n", sock);
-#endif
- while (NULL != (pos = sock->ap_head))
- {
- GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (pos->sock));
- GNUNET_SCHEDULER_cancel (pos->task);
- GNUNET_CONTAINER_DLL_remove (sock->ap_head, sock->ap_tail, pos);
- GNUNET_free (pos);
- }
- GNUNET_assert (sock->nth.timeout_task == GNUNET_SCHEDULER_NO_TASK);
- GNUNET_assert (sock->ccs == COCO_NONE);
- if (NULL != (notify = sock->nth.notify_ready))
- {
- sock->nth.notify_ready = NULL;
- notify (sock->nth.notify_ready_cls, 0, NULL);
- }
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Connection signals timeout to receiver (%p)!\n",
+ connection);
+ GNUNET_assert (NULL != (receiver = connection->receiver));
+ connection->receiver = NULL;
+ receiver (connection->receiver_cls, NULL, 0, NULL, 0, 0);
+}