[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