Revision: 1924
http://undernet-ircu.svn.sourceforge.net/undernet-ircu/?rev=1924&view=rev
Author: entrope
Date: 2010-01-02 05:01:14 +0000 (Sat, 02 Jan 2010)
Log Message:
-----------
Improve the clean-up of outdated IAuth instances on rehash (SF bug #2789656).
Modified Paths:
--------------
ircu2/branches/u2_10_12_branch/ChangeLog
ircu2/branches/u2_10_12_branch/ircd/s_auth.c
Modified: ircu2/branches/u2_10_12_branch/ChangeLog
===================================================================
--- ircu2/branches/u2_10_12_branch/ChangeLog 2010-01-02 04:15:50 UTC (rev
1923)
+++ ircu2/branches/u2_10_12_branch/ChangeLog 2010-01-02 05:01:14 UTC (rev
1924)
@@ -1,5 +1,13 @@
2010-01-01 Michael Poole <[email protected]>
+ * ircd/s_auth.c (iauth_do_spawn): Add debug output to diagnose
+ which system call might be failing.
+ (auth_spawn): Avoid reading past the end of iauth->i_argv[]. When
+ discarding an existing IAuth instance, use auth_close_unused() to
+ close the sockets and avoid leaking memory.
+
+2010-01-01 Michael Poole <[email protected]>
+
* ircd/channel.c (mode_process_bans): Bypass total ban count and
length checks for OPMODEs.
Modified: ircu2/branches/u2_10_12_branch/ircd/s_auth.c
===================================================================
--- ircu2/branches/u2_10_12_branch/ircd/s_auth.c 2010-01-02 04:15:50 UTC
(rev 1923)
+++ ircu2/branches/u2_10_12_branch/ircd/s_auth.c 2010-01-02 05:01:14 UTC
(rev 1924)
@@ -1188,13 +1188,17 @@
/* Attempt to allocate a pair of sockets. */
res = os_socketpair(s_io);
- if (res)
- return errno;
+ if (res) {
+ res = errno;
+ Debug((DEBUG_INFO, "Unable to create IAuth socketpair: %s",
strerror(res)));
+ return res;
+ }
/* Mark the parent's side of the pair (element 0) as non-blocking. */
res = os_set_nonblocking(s_io[0]);
if (!res) {
res = errno;
+ Debug((DEBUG_INFO, "Unable to make IAuth socket non-blocking: %s",
strerror(res)));
close(s_io[1]);
close(s_io[0]);
return res;
@@ -1205,6 +1209,7 @@
SS_CONNECTED, SOCK_EVENT_READABLE, s_io[0]);
if (!res) {
res = errno;
+ Debug((DEBUG_INFO, "Unable to register IAuth socket: %s", strerror(res)));
close(s_io[1]);
close(s_io[0]);
return res;
@@ -1214,6 +1219,7 @@
res = os_socketpair(s_err);
if (res) {
res = errno;
+ Debug((DEBUG_INFO, "Unable to create IAuth stderr: %s", strerror(res)));
socket_del(i_socket(iauth));
close(s_io[1]);
close(s_io[0]);
@@ -1224,6 +1230,7 @@
res = os_set_nonblocking(s_err[0]);
if (!res) {
res = errno;
+ Debug((DEBUG_INFO, "Unable to make IAuth stderr non-blocking: %s",
strerror(res)));
close(s_err[1]);
close(s_err[0]);
socket_del(i_socket(iauth));
@@ -1237,6 +1244,7 @@
SS_CONNECTED, SOCK_EVENT_READABLE, s_err[0]);
if (!res) {
res = errno;
+ Debug((DEBUG_INFO, "Unable to register IAuth stderr: %s", strerror(res)));
close(s_err[1]);
close(s_err[0]);
socket_del(i_socket(iauth));
@@ -1250,6 +1258,7 @@
if (cpid < 0) {
/* Error forking the child, still in parent. */
res = errno;
+ Debug((DEBUG_INFO, "Unable to fork IAuth child: %s", strerror(res)));
socket_del(i_stderr(iauth));
close(s_err[1]);
close(s_err[0]);
@@ -1309,17 +1318,15 @@
same = 0;
}
/* Check that we have no more pre-existing arguments. */
- if (iauth->i_argv[ii])
+ if (same && iauth->i_argv[ii])
same = 0;
- /* If they are the same and still connected, clear the "closing" flag and
exit.*/
+ /* If they are the same and still connected, clear the "closing" flag and
exit. */
if (same && i_GetConnected(iauth)) {
+ Debug((DEBUG_INFO, "Reusing existing IAuth process"));
IAuthClr(iauth, IAUTH_CLOSING);
return 2;
}
- /* Deallocate old argv elements. */
- for (ii = 0; iauth->i_argv[ii]; ++ii)
- MyFree(iauth->i_argv[ii]);
- MyFree(iauth->i_argv);
+ auth_close_unused();
}
/* Need to initialize a new connection. */
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Patches mailing list
[email protected]
http://undernet.sbg.org/mailman/listinfo/patches