[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r19992 - gnunet/src/transport
From: |
gnunet |
Subject: |
[GNUnet-SVN] r19992 - gnunet/src/transport |
Date: |
Thu, 23 Feb 2012 19:08:02 +0100 |
Author: wachs
Date: 2012-02-23 19:08:02 +0100 (Thu, 23 Feb 2012)
New Revision: 19992
Modified:
gnunet/src/transport/plugin_transport_unix.c
Log:
improved rescheduling
improved recv error handling
Modified: gnunet/src/transport/plugin_transport_unix.c
===================================================================
--- gnunet/src/transport/plugin_transport_unix.c 2012-02-23 17:49:55 UTC
(rev 19991)
+++ gnunet/src/transport/plugin_transport_unix.c 2012-02-23 18:08:02 UTC
(rev 19992)
@@ -223,6 +223,8 @@
*/
struct GNUNET_NETWORK_FDSet *ws;
+ int with_ws;
+
/**
* socket that we transmit all data with
*/
@@ -315,7 +317,7 @@
GNUNET_break (GNUNET_OK ==
GNUNET_NETWORK_socket_close (plugin->unix_sock.desc));
plugin->unix_sock.desc = NULL;
-
+ plugin->with_ws = GNUNET_NO;
return GNUNET_OK;
}
@@ -635,17 +637,20 @@
(char *) session->addr);
#endif
- if (plugin->select_task != GNUNET_SCHEDULER_NO_TASK)
- GNUNET_SCHEDULER_cancel(plugin->select_task);
+ if (plugin->with_ws == GNUNET_NO)
+ {
+ if (plugin->select_task != GNUNET_SCHEDULER_NO_TASK)
+ GNUNET_SCHEDULER_cancel(plugin->select_task);
- plugin->select_task =
- GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
- GNUNET_SCHEDULER_NO_TASK,
- GNUNET_TIME_UNIT_FOREVER_REL,
- plugin->rs,
- plugin->ws,
- &unix_plugin_select, plugin);
-
+ plugin->select_task =
+ GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
+ GNUNET_SCHEDULER_NO_TASK,
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ plugin->rs,
+ plugin->ws,
+ &unix_plugin_select, plugin);
+ plugin->with_ws = GNUNET_YES;
+ }
return ssize;
}
@@ -705,6 +710,9 @@
GNUNET_NETWORK_socket_recvfrom (plugin->unix_sock.desc, buf, sizeof
(buf),
(struct sockaddr *) &un, &addrlen);
+ if ((GNUNET_SYSERR == ret) && ((errno == EAGAIN) || (errno == ENOBUFS)))
+ return;
+
if (ret == GNUNET_SYSERR)
{
GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "recvfrom");
@@ -807,7 +815,7 @@
if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
return;
-
+ plugin->with_ws = GNUNET_NO;
if ((tc->reason & GNUNET_SCHEDULER_REASON_WRITE_READY) != 0)
{
GNUNET_assert (GNUNET_NETWORK_fdset_isset
@@ -823,6 +831,8 @@
unix_plugin_select_read (plugin);
}
+ if (plugin->select_task != GNUNET_SCHEDULER_NO_TASK)
+ GNUNET_SCHEDULER_cancel (plugin->select_task);
plugin->select_task =
GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
GNUNET_SCHEDULER_NO_TASK,
@@ -830,6 +840,8 @@
plugin->rs,
(plugin->msg_head != NULL) ? plugin->ws :
NULL,
&unix_plugin_select, plugin);
+ if (plugin->msg_head != NULL)
+ plugin->with_ws = GNUNET_YES;
}
/**
@@ -895,8 +907,12 @@
plugin->select_task =
GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
GNUNET_SCHEDULER_NO_TASK,
- GNUNET_TIME_UNIT_FOREVER_REL, plugin->rs,
- plugin->ws, &unix_plugin_select, plugin);
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ plugin->rs,
+ NULL,
+ &unix_plugin_select, plugin);
+ plugin->with_ws = GNUNET_NO;
+
return 1;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r19992 - gnunet/src/transport,
gnunet <=