[Asterisk-code-review] DEBUG FD LEAKS: Add missing FD creators. (asterisk[master])
Joshua Colp
asteriskteam at digium.com
Fri Nov 17 09:26:49 CST 2017
Joshua Colp has submitted this change and it was merged. ( https://gerrit.asterisk.org/7115 )
Change subject: DEBUG_FD_LEAKS: Add missing FD creators.
......................................................................
DEBUG_FD_LEAKS: Add missing FD creators.
This adds FD tracking for the following functions:
* eventfd
* timerfd_create
* socketpair
* accept
ASTERISK-27404
Change-Id: Id6848fe904ade2d34eb39d2a20bd6b223e1111fc
---
M include/asterisk.h
M main/astfd.c
2 files changed, 75 insertions(+), 0 deletions(-)
Approvals:
Joshua Colp: Looks good to me, but someone else must approve; Approved for Submit
George Joseph: Looks good to me, approved
diff --git a/include/asterisk.h b/include/asterisk.h
index 899438b..9122e3a 100644
--- a/include/asterisk.h
+++ b/include/asterisk.h
@@ -59,7 +59,9 @@
#define open(a,...) __ast_fdleak_open(__FILE__,__LINE__,__PRETTY_FUNCTION__, a, __VA_ARGS__)
#define pipe(a) __ast_fdleak_pipe(a, __FILE__,__LINE__,__PRETTY_FUNCTION__)
+#define socketpair(a,b,c,d) __ast_fdleak_socketpair(a, b, c, d, __FILE__,__LINE__,__PRETTY_FUNCTION__)
#define socket(a,b,c) __ast_fdleak_socket(a, b, c, __FILE__,__LINE__,__PRETTY_FUNCTION__)
+#define accept(a,b,c) __ast_fdleak_accept(a, b, c, __FILE__,__LINE__,__PRETTY_FUNCTION__)
#define close(a) __ast_fdleak_close(a)
#define fopen(a,b) __ast_fdleak_fopen(a, b, __FILE__,__LINE__,__PRETTY_FUNCTION__)
#define fclose(a) __ast_fdleak_fclose(a)
@@ -71,7 +73,21 @@
#endif
int __ast_fdleak_open(const char *file, int line, const char *func, const char *path, int flags, ...);
int __ast_fdleak_pipe(int *fds, const char *file, int line, const char *func);
+int __ast_fdleak_socketpair(int domain, int type, int protocol, int sv[2],
+ const char *file, int line, const char *func);
int __ast_fdleak_socket(int domain, int type, int protocol, const char *file, int line, const char *func);
+int __ast_fdleak_accept(int socket, struct sockaddr *address, socklen_t *address_len,
+ const char *file, int line, const char *func);
+#if defined(HAVE_EVENTFD)
+#include <sys/eventfd.h>
+#define eventfd(a,b) __ast_fdleak_eventfd(a,b, __FILE__,__LINE__,__PRETTY_FUNCTION__)
+int __ast_fdleak_eventfd(unsigned int initval, int flags, const char *file, int line, const char *func);
+#endif
+#if defined(HAVE_TIMERFD)
+#include <sys/timerfd.h>
+#define timerfd_create(a,b) __ast_fdleak_timerfd_create(a,b, __FILE__,__LINE__,__PRETTY_FUNCTION__)
+int __ast_fdleak_timerfd_create(int clockid, int flags, const char *file, int line, const char *func);
+#endif
int __ast_fdleak_close(int fd);
FILE *__ast_fdleak_fopen(const char *path, const char *mode, const char *file, int line, const char *func);
int __ast_fdleak_fclose(FILE *ptr);
diff --git a/main/astfd.c b/main/astfd.c
index 34cf7bb..e29361e 100644
--- a/main/astfd.c
+++ b/main/astfd.c
@@ -132,6 +132,19 @@
return res;
}
+#undef accept
+int __ast_fdleak_accept(int socket, struct sockaddr *address, socklen_t *address_len,
+ const char *file, int line, const char *func)
+{
+ int res = accept(socket, address, address_len);
+
+ if (res >= 0) {
+ STORE_COMMON(res, "accept", "{%d}", socket);
+ }
+
+ return res;
+}
+
#undef pipe
int __ast_fdleak_pipe(int *fds, const char *file, int line, const char *func)
{
@@ -147,6 +160,52 @@
return 0;
}
+#undef socketpair
+int __ast_fdleak_socketpair(int domain, int type, int protocol, int sv[2],
+ const char *file, int line, const char *func)
+{
+ int i, res = socketpair(domain, type, protocol, sv);
+ if (res) {
+ return res;
+ }
+ for (i = 0; i < 2; i++) {
+ if (sv[i] > -1 && sv[i] < ARRAY_LEN(fdleaks)) {
+ STORE_COMMON(sv[i], "socketpair", "{%d,%d}", sv[0], sv[1]);
+ }
+ }
+ return 0;
+}
+
+#if defined(HAVE_EVENTFD)
+#undef eventfd
+#include <sys/eventfd.h>
+int __ast_fdleak_eventfd(unsigned int initval, int flags, const char *file, int line, const char *func)
+{
+ int res = eventfd(initval, flags);
+
+ if (res >= 0) {
+ STORE_COMMON(res, "eventfd", "{%d}", res);
+ }
+
+ return res;
+}
+#endif
+
+#if defined(HAVE_TIMERFD)
+#undef timerfd_create
+#include <sys/timerfd.h>
+int __ast_fdleak_timerfd_create(int clockid, int flags, const char *file, int line, const char *func)
+{
+ int res = timerfd_create(clockid, flags);
+
+ if (res >= 0) {
+ STORE_COMMON(res, "timerfd_create", "{%d}", res);
+ }
+
+ return res;
+}
+#endif
+
#undef socket
int __ast_fdleak_socket(int domain, int type, int protocol, const char *file, int line, const char *func)
{
--
To view, visit https://gerrit.asterisk.org/7115
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Id6848fe904ade2d34eb39d2a20bd6b223e1111fc
Gerrit-Change-Number: 7115
Gerrit-PatchSet: 2
Gerrit-Owner: Corey Farrell <git at cfware.com>
Gerrit-Reviewer: Corey Farrell <git at cfware.com>
Gerrit-Reviewer: George Joseph <gjoseph at digium.com>
Gerrit-Reviewer: Jenkins2
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20171117/6b15ce99/attachment.html>
More information about the asterisk-code-review
mailing list