projects
/
silc.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e5e2883
)
Take stream reference correctly in packet error callback
author
Pekka Riikonen
<priikone@silcnet.org>
Fri, 9 Jan 2009 05:33:55 +0000
(07:33 +0200)
committer
Pekka Riikonen
<priikone@silcnet.org>
Fri, 9 Jan 2009 05:33:55 +0000
(07:33 +0200)
Reverted commit
e5e28835f5f0c4c5b52f0449e75b7f1c03a37548
apps/silcd/server.c
patch
|
blob
|
history
diff --git
a/apps/silcd/server.c
b/apps/silcd/server.c
index eb8aed23f7f98719e11df33c22a5d93d6ea83a81..f2153b359b673b6591f7677635c21b7c00b107c7 100644
(file)
--- a/
apps/silcd/server.c
+++ b/
apps/silcd/server.c
@@
-27,7
+27,6
@@
SILC_TASK_CALLBACK(silc_server_connect_router);
SILC_TASK_CALLBACK(silc_server_connect_to_router_retry);
SILC_TASK_CALLBACK(silc_server_do_rekey);
SILC_TASK_CALLBACK(silc_server_purge_expired_clients);
SILC_TASK_CALLBACK(silc_server_connect_to_router_retry);
SILC_TASK_CALLBACK(silc_server_do_rekey);
SILC_TASK_CALLBACK(silc_server_purge_expired_clients);
-SILC_TASK_CALLBACK(silc_server_packet_error_timeout);
static void silc_server_accept_new_connection(SilcNetStatus status,
SilcStream stream,
void *context);
static void silc_server_accept_new_connection(SilcNetStatus status,
SilcStream stream,
void *context);
@@
-200,10
+199,6
@@
static void silc_server_packet_eos(SilcPacketEngine engine,
if (!idata)
return;
if (!idata)
return;
- /* Remove any possible pending packet error timeout */
- silc_schedule_task_del_by_all(server->schedule, 0,
- silc_server_packet_error_timeout, stream);
-
if (server->router_conn && server->router_conn->sock == stream &&
!server->router && server->standalone) {
if (idata->sconn && idata->sconn->callback)
if (server->router_conn && server->router_conn->sock == stream &&
!server->router && server->standalone) {
if (idata->sconn && idata->sconn->callback)
@@
-233,8
+228,10
@@
SILC_TASK_CALLBACK(silc_server_packet_error_timeout)
SilcPacketStream stream = context;
SilcIDListData idata = silc_packet_get_context(stream);
SilcPacketStream stream = context;
SilcIDListData idata = silc_packet_get_context(stream);
- if (!idata)
+ if (!idata || !silc_packet_stream_is_valid(stream)) {
+ silc_packet_stream_unref(stream);
return;
return;
+ }
if (server->router_conn && server->router_conn->sock == stream &&
!server->router && server->standalone) {
if (server->router_conn && server->router_conn->sock == stream &&
!server->router && server->standalone) {
@@
-257,6
+254,9
@@
SILC_TASK_CALLBACK(silc_server_packet_error_timeout)
}
silc_server_close_connection(server, stream);
}
silc_server_close_connection(server, stream);
+
+ /* Release our stream reference */
+ silc_packet_stream_unref(stream);
}
/* Packet engine callback to indicate error */
}
/* Packet engine callback to indicate error */
@@
-273,7
+273,7
@@
static void silc_server_packet_error(SilcPacketEngine engine,
const char *ip;
SilcUInt16 port;
const char *ip;
SilcUInt16 port;
- SILC_LOG_DEBUG(("Packet error
, sock %p"
, stream));
+ SILC_LOG_DEBUG(("Packet error
%d, sock %p", error
, stream));
if (!idata || !sock)
return;
if (!idata || !sock)
return;
@@
-288,6
+288,9
@@
static void silc_server_packet_error(SilcPacketEngine engine,
if (!silc_packet_stream_is_valid(stream))
return;
if (!silc_packet_stream_is_valid(stream))
return;
+ /* We must take reference of the stream */
+ silc_packet_stream_ref(stream);
+
/* In case we get here many times, register only one timeout */
silc_schedule_task_del_by_all(server->schedule, 0,
silc_server_packet_error_timeout, stream);
/* In case we get here many times, register only one timeout */
silc_schedule_task_del_by_all(server->schedule, 0,
silc_server_packet_error_timeout, stream);
@@
-3097,7
+3100,8
@@
void silc_server_disconnect_remote(SilcServer server,
if (!sock)
return;
if (!sock)
return;
- SILC_LOG_DEBUG(("Disconnecting remote host, sock %p", sock));
+ SILC_LOG_DEBUG(("Disconnecting remote host, sock %p, status %d", sock,
+ status));
va_start(ap, status);
cp = va_arg(ap, char *);
va_start(ap, status);
cp = va_arg(ap, char *);
@@
-3216,11
+3220,8
@@
void silc_server_free_sock_user_data(SilcServer server,
if (!idata)
return;
if (!idata)
return;
- /* Remove any possible pending timeout */
silc_schedule_task_del_by_all(server->schedule, 0, silc_server_do_rekey,
sock);
silc_schedule_task_del_by_all(server->schedule, 0, silc_server_do_rekey,
sock);
- silc_schedule_task_del_by_all(server->schedule, 0,
- silc_server_packet_error_timeout, sock);
/* Cancel active protocols */
if (idata) {
/* Cancel active protocols */
if (idata) {