[asterisk-commits] simon.perreault: branch group/v6 r84778 - /team/group/v6/trunk/main/asterisk.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Oct 5 10:05:04 CDT 2007


Author: simon.perreault
Date: Fri Oct  5 10:05:03 2007
New Revision: 84778

URL: http://svn.digium.com/view/asterisk?view=rev&rev=84778
Log:
Beginning of a file descriptor leak tracing facility. This simply prints the FDs that are
still open just before terminating.

Modified:
    team/group/v6/trunk/main/asterisk.c

Modified: team/group/v6/trunk/main/asterisk.c
URL: http://svn.digium.com/view/asterisk/team/group/v6/trunk/main/asterisk.c?view=diff&rev=84778&r1=84777&r2=84778
==============================================================================
--- team/group/v6/trunk/main/asterisk.c (original)
+++ team/group/v6/trunk/main/asterisk.c Fri Oct  5 10:05:03 2007
@@ -80,6 +80,7 @@
 #include <grp.h>
 #include <pwd.h>
 #include <sys/stat.h>
+#include <dirent.h>
 #if defined(HAVE_SYSINFO)
 #include <sys/sysinfo.h>
 #endif
@@ -1206,6 +1207,27 @@
 	AST_RWLIST_UNLOCK(&atexits);
 }
 
+static void show_fd_leaks(void)
+{
+	DIR *d;
+	struct dirent *fd;
+	char buf[PATH_MAX];
+	ssize_t len;
+
+	if (!(d = opendir("/proc/self/fd")))
+		return;
+
+	while ((fd = readdir(d))) {
+		snprintf(buf, sizeof(buf), "/proc/self/fd/%s", fd->d_name);
+		if ((len = readlink(buf, buf, sizeof(buf))) == -1)
+			continue;
+		buf[len] = '\0';
+		ast_debug(1, "Possible FD leak: %s -> %s\n", fd->d_name, buf);
+	}
+
+	closedir(d);
+}
+
 static void quit_handler(int num, int nice, int safeshutdown, int restart)
 {
 	char filename[80] = "";
@@ -1284,6 +1306,7 @@
 		close(ast_consock);
 	if (!ast_opt_remote)
 		unlink(ast_config_AST_PID);
+	show_fd_leaks();
 	printf(term_quit());
 	if (restart) {
 		if (option_verbose || ast_opt_console)




More information about the asterisk-commits mailing list