[SCM] Socket Wrapper Repository - branch master updated

Andreas Schneider asn at samba.org
Tue Nov 13 12:57:35 UTC 2018


The branch, master has been updated
       via  ac18c80 Bump version to 1.2.0
       via  aff61a7 swrap: Also log the process name
       via  d26ceb5 swrap: Better handling for default values in socket_wrapper_max_sockets()
       via  74c3a9a swrap: Always allocate the socket fd array to the maximum
       via  87cc3f8 swrap: Rename global variable for max sockets
      from  d788cef tests: Enable threaded test cases on FreeBSD

https://git.samba.org/?p=socket_wrapper.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit ac18c80e2096f0edc542273325fb2571d35cb796
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Nov 12 11:14:20 2018 +0100

    Bump version to 1.2.0
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit aff61a781700ce8c1e6f9d0cd74b4c484be354fa
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Nov 12 15:22:35 2018 +0100

    swrap: Also log the process name
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit d26ceb542342d6eef4a8df14f79ca2f81d1e550e
Author: Andreas Schneider <asn at samba.org>
Date:   Tue Nov 13 08:31:43 2018 +0100

    swrap: Better handling for default values in socket_wrapper_max_sockets()
    
    Pair-Programmed-With: Anoop C S <anoopcs at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Signed-off-by: Anoop C S <anoopcs at redhat.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit 74c3a9a60e5cfb8d191876c24e88e5d3aa38ca58
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Nov 12 17:34:08 2018 +0100

    swrap: Always allocate the socket fd array to the maximum
    
    This will allow that we can deal with duplicates if the default value is
    used.
    
    Pair-Programmed-With: Anoop C S <anoopcs at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Signed-off-by: Anoop C S <anoopcs at redhat.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit 87cc3f8e5433471e986c3b50e351ae49289b4cbe
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Nov 12 17:00:09 2018 +0100

    swrap: Rename global variable for max sockets
    
    We also need a mutex to protect access to it.
    
    Pair-Programmed-With: Anoop C S <anoopcs at redhat.com>
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Signed-off-by: Anoop C S <anoopcs at redhat.com>
    Reviewed-by: Ralph Boehme <slow at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 CMakeLists.txt        |  4 +--
 ChangeLog             |  5 +++
 ConfigureChecks.cmake |  9 ++++++
 config.h.cmake        |  6 ++++
 src/socket_wrapper.c  | 85 ++++++++++++++++++++++++++++++++++++++-------------
 5 files changed, 85 insertions(+), 24 deletions(-)


Changeset truncated at 500 lines:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 35527f1..2f51bea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,7 +11,7 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules")
 include(DefineCMakeDefaults)
 include(DefineCompilerFlags)
 
-project(socket_wrapper VERSION 1.1.9 LANGUAGES C)
+project(socket_wrapper VERSION 1.2.0 LANGUAGES C)
 
 # global needed variables
 set(APPLICATION_NAME ${PROJECT_NAME})
@@ -23,7 +23,7 @@ set(APPLICATION_NAME ${PROJECT_NAME})
 #     Increment AGE. Set REVISION to 0
 #   If the source code was changed, but there were no interface changes:
 #     Increment REVISION.
-set(LIBRARY_VERSION "0.1.9")
+set(LIBRARY_VERSION "0.1.10")
 set(LIBRARY_SOVERSION "0")
 
 # add definitions
diff --git a/ChangeLog b/ChangeLog
index 50911b6..639044d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
 ChangeLog
 ==========
 
+version 1.2.0 (released 2018-11-13)
+  * Added threading support
+  * Moved to modern cmake
+  * Several smaller bugfixes
+
 version 1.1.9 (released 2017-12-04)
   * Fixed thread - signal deadlock issue
 
diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
index 94fed22..6cedb90 100644
--- a/ConfigureChecks.cmake
+++ b/ConfigureChecks.cmake
@@ -54,6 +54,13 @@ check_include_file(sys/timerfd.h HAVE_SYS_TIMERFD_H)
 check_include_file(gnu/lib-names.h HAVE_GNU_LIB_NAMES_H)
 check_include_file(rpc/rpc.h HAVE_RPC_RPC_H)
 
+# SYMBOLS
+set(CMAKE_REQUIRED_FLAGS -D_GNU_SOURCE)
+check_symbol_exists(program_invocation_short_name
+                    "errno.h"
+                    HAVE_PROGRAM_INVOCATION_SHORT_NAME)
+unset(CMAKE_REQUIRED_FLAGS)
+
 # FUNCTIONS
 check_function_exists(strncpy HAVE_STRNCPY)
 check_function_exists(vsnprintf HAVE_VSNPRINTF)
@@ -65,6 +72,8 @@ check_function_exists(bindresvport HAVE_BINDRESVPORT)
 check_function_exists(accept4 HAVE_ACCEPT4)
 check_function_exists(open64 HAVE_OPEN64)
 check_function_exists(fopen64 HAVE_FOPEN64)
+check_function_exists(getprogname HAVE_GETPROGNAME)
+check_function_exists(getexecname HAVE_GETEXECNAME)
 
 check_function_exists(pledge HAVE_PLEDGE)
 
diff --git a/config.h.cmake b/config.h.cmake
index 5baa789..0207031 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -31,6 +31,10 @@
 #cmakedefine HAVE_STRUCT_SOCKADDR_SA_LEN 1
 #cmakedefine HAVE_STRUCT_MSGHDR_MSG_CONTROL 1
 
+/**************************** SYMBOLS ****************************/
+
+#cmakedefine HAVE_PROGRAM_INVOCATION_SHORT_NAME 1
+
 /*************************** FUNCTIONS ***************************/
 
 /* Define to 1 if you have the `getaddrinfo' function. */
@@ -42,6 +46,8 @@
 #cmakedefine HAVE_ACCEPT4 1
 #cmakedefine HAVE_OPEN64 1
 #cmakedefine HAVE_FOPEN64 1
+#cmakedefine HAVE_GETPROGNAME 1
+#cmakedefine HAVE_GETEXECNAME 1
 #cmakedefine HAVE_PLEDGE 1
 
 #cmakedefine HAVE_ACCEPT_PSOCKLEN_T 1
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index a107710..2b77ceb 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -230,7 +230,7 @@ enum swrap_dbglvl_e {
  */
 #define SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT 65535
 
-#define SOCKET_WRAPPER_MAX_SOCKETS_LIMIT 256000
+#define SOCKET_WRAPPER_MAX_SOCKETS_LIMIT 262140
 
 /* This limit is to avoid broadcast sendto() needing to stat too many
  * files.  It may be raised (with a performance cost) to up to 254
@@ -293,7 +293,14 @@ struct socket_info_container
 
 static struct socket_info_container *sockets;
 
-static size_t max_sockets = 0;
+static size_t socket_info_max = 0;
+
+/*
+ * Allocate the socket array always on the limit value. We want it to be
+ * at least bigger than the default so if we reach the limit we can
+ * still deal with duplicate fds pointing to the same socket_info.
+ */
+static size_t socket_fds_max = SOCKET_WRAPPER_MAX_SOCKETS_LIMIT;
 
 /* Hash table to map fds to corresponding socket_info index */
 static int *socket_fds_idx;
@@ -326,6 +333,19 @@ bool socket_wrapper_enabled(void);
 void swrap_constructor(void) CONSTRUCTOR_ATTRIBUTE;
 void swrap_destructor(void) DESTRUCTOR_ATTRIBUTE;
 
+#ifndef HAVE_GETPROGNAME
+static const char *getprogname(void)
+{
+#if defined(HAVE_PROGRAM_INVOCATION_SHORT_NAME)
+	return program_invocation_short_name;
+#elif defined(HAVE_GETEXECNAME)
+	return getexecname();
+#else
+	return NULL;
+#endif /* HAVE_PROGRAM_INVOCATION_SHORT_NAME */
+}
+#endif /* HAVE_GETPROGNAME */
+
 static void swrap_log(enum swrap_dbglvl_e dbglvl, const char *func, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
 # define SWRAP_LOG(dbglvl, ...) swrap_log((dbglvl), __func__, __VA_ARGS__)
 
@@ -338,6 +358,7 @@ static void swrap_log(enum swrap_dbglvl_e dbglvl,
 	const char *d;
 	unsigned int lvl = 0;
 	const char *prefix = "SWRAP";
+	const char *progname = getprogname();
 
 	d = getenv("SOCKET_WRAPPER_DEBUGLEVEL");
 	if (d != NULL) {
@@ -367,9 +388,17 @@ static void swrap_log(enum swrap_dbglvl_e dbglvl,
 			break;
 	}
 
+	if (progname == NULL) {
+		progname = "<unknown>";
+	}
+
 	fprintf(stderr,
-		"%s(%d) - %s: %s\n",
-		prefix, (int)getpid(), func, buffer);
+		"%s[%s (%u)] - %s: %s\n",
+		prefix,
+		progname,
+		(unsigned int)getpid(),
+		func,
+		buffer);
 }
 
 /*********************************************************
@@ -1321,14 +1350,14 @@ done:
 static size_t socket_wrapper_max_sockets(void)
 {
 	const char *s;
-	unsigned long tmp;
+	size_t tmp;
 	char *endp;
 
-	if (max_sockets != 0) {
-		return max_sockets;
+	if (socket_info_max != 0) {
+		return socket_info_max;
 	}
 
-	max_sockets = SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT;
+	socket_info_max = SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT;
 
 	s = getenv("SOCKET_WRAPPER_MAX_SOCKETS");
 	if (s == NULL || s[0] == '\0') {
@@ -1339,16 +1368,26 @@ static size_t socket_wrapper_max_sockets(void)
 	if (s == endp) {
 		goto done;
 	}
-	if (tmp == 0 || tmp > SOCKET_WRAPPER_MAX_SOCKETS_LIMIT) {
+	if (tmp == 0) {
+		tmp = SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT;
 		SWRAP_LOG(SWRAP_LOG_ERROR,
-			  "Invalid number of sockets specified, using default.");
-		goto done;
+			  "Invalid number of sockets specified, "
+			  "using default (%zu)",
+			  tmp);
+	}
+
+	if (tmp > SOCKET_WRAPPER_MAX_SOCKETS_LIMIT) {
+		tmp = SOCKET_WRAPPER_MAX_SOCKETS_LIMIT;
+		SWRAP_LOG(SWRAP_LOG_ERROR,
+			  "Invalid number of sockets specified, "
+			  "using maximum (%zu).",
+			  tmp);
 	}
 
-	max_sockets = tmp;
+	socket_info_max = tmp;
 
 done:
-	return max_sockets;
+	return socket_info_max;
 }
 
 static void socket_wrapper_init_fds_idx(void)
@@ -1360,7 +1399,7 @@ static void socket_wrapper_init_fds_idx(void)
 		return;
 	}
 
-	tmp = (int *)calloc(SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT, sizeof(int));
+	tmp = (int *)calloc(socket_fds_max, sizeof(int));
 	if (tmp == NULL) {
 		SWRAP_LOG(SWRAP_LOG_ERROR,
 			  "Failed to allocate socket fds index array: %s",
@@ -1368,7 +1407,7 @@ static void socket_wrapper_init_fds_idx(void)
 		exit(-1);
 	}
 
-	for (i = 0; i < SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT; i++) {
+	for (i = 0; i < socket_fds_max; i++) {
 		tmp[i] = -1;
 	}
 
@@ -1377,6 +1416,7 @@ static void socket_wrapper_init_fds_idx(void)
 
 static void socket_wrapper_init_sockets(void)
 {
+	size_t max_sockets;
 	size_t i;
 	int ret;
 
@@ -1389,6 +1429,7 @@ static void socket_wrapper_init_sockets(void)
 
 	socket_wrapper_init_fds_idx();
 
+	/* Needs to be called inside the sockets_mutex lock here. */
 	max_sockets = socket_wrapper_max_sockets();
 
 	sockets = (struct socket_info_container *)calloc(max_sockets,
@@ -1498,11 +1539,11 @@ static int find_socket_info_index(int fd)
 		return -1;
 	}
 
-	if (fd >= SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT) {
+	if (fd >= socket_fds_max) {
 		SWRAP_LOG(SWRAP_LOG_ERROR,
-			  "The max socket index limit of %u has been reached, "
+			  "The max socket index limit of %zu has been reached, "
 			  "trying to add %d",
-			  SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT,
+			  socket_fds_max,
 			  fd);
 		return -1;
 	}
@@ -1549,11 +1590,11 @@ static int swrap_create_socket(struct socket_info *si, int fd)
 {
 	int idx;
 
-	if (fd >= SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT) {
+	if (fd >= socket_fds_max) {
 		SWRAP_LOG(SWRAP_LOG_ERROR,
-			  "The max socket index limit of %u has been reached, "
+			  "The max socket index limit of %zu has been reached, "
 			  "trying to add %d",
-			  SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT,
+			  socket_fds_max,
 			  fd);
 		return -1;
 	}
@@ -6251,7 +6292,7 @@ void swrap_destructor(void)
 	size_t i;
 
 	if (socket_fds_idx != NULL) {
-		for (i = 0; i < SOCKET_WRAPPER_MAX_SOCKETS_DEFAULT; ++i) {
+		for (i = 0; i < socket_fds_max; ++i) {
 			if (socket_fds_idx[i] != -1) {
 				swrap_close(i);
 			}


-- 
Socket Wrapper Repository



More information about the samba-cvs mailing list