1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-07 02:42:49 +03:00

Fix openssl sigpipe correctly, move signal handler to openssl.c

This commit is contained in:
Vladislav Vaintroub
2016-05-31 14:24:55 +02:00
parent 7080d9614f
commit 7496789f10
3 changed files with 24 additions and 18 deletions

View File

@@ -157,6 +157,7 @@ enum enum_server_command
#define CLIENT_CONNECT_ATTRS (1UL << 20) #define CLIENT_CONNECT_ATTRS (1UL << 20)
#define CLIENT_SESSION_TRACKING (1UL << 23) #define CLIENT_SESSION_TRACKING (1UL << 23)
#define CLIENT_PROGRESS (1UL << 29) /* client supports progress indicator */ #define CLIENT_PROGRESS (1UL << 29) /* client supports progress indicator */
#define CLIENT_PROGRESS_OBSOLETE CLIENT_PROGRESS
#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30) #define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30)
#define CLIENT_REMEMBER_OPTIONS (1UL << 31) #define CLIENT_REMEMBER_OPTIONS (1UL << 31)

View File

@@ -3472,13 +3472,6 @@ BOOL CALLBACK win_init_once(
} }
#endif #endif
#if defined(SIGPIPE) && !defined(_WIN32) && defined(WITH_OPENSSL)
static void ma_sigpipe_handler()
{
return;
}
#endif
int STDCALL mysql_server_init(int argc __attribute__((unused)), int STDCALL mysql_server_init(int argc __attribute__((unused)),
char **argv __attribute__((unused)), char **argv __attribute__((unused)),
char **groups __attribute__((unused))) char **groups __attribute__((unused)))
@@ -3489,17 +3482,6 @@ int STDCALL mysql_server_init(int argc __attribute__((unused)),
return ret? 0: 1; return ret? 0: 1;
#else #else
static pthread_once_t init_once = PTHREAD_ONCE_INIT; static pthread_once_t init_once = PTHREAD_ONCE_INIT;
#if defined(SIGPIPE) && defined(WITH_OPENSSL)
struct sigaction old_handler, new_handler={NULL};
if (!sigaction (SIGPIPE, NULL, &old_handler) &&
!old_handler.sa_handler)
{
new_handler.sa_handler= ma_sigpipe_handler;
new_handler.sa_flags= 0;
if (!sigemptyset(&new_handler.sa_mask))
sigaction(SIGPIPE, &new_handler, NULL);
}
#endif
return pthread_once(&init_once, mysql_once_init); return pthread_once(&init_once, mysql_once_init);
#endif #endif
} }

View File

@@ -226,6 +226,28 @@ static int ssl_thread_init()
} }
#ifdef _WIN32
#define disable_sigpipe()
#else
#include <signal.h>
static void ma_sigpipe_handler()
{
}
static void disable_sigpipe()
{
struct sigaction old_handler, new_handler={NULL};
if (!sigaction (SIGPIPE, NULL, &old_handler) &&
!old_handler.sa_handler)
{
new_handler.sa_handler= ma_sigpipe_handler;
new_handler.sa_flags= 0;
if (!sigemptyset(&new_handler.sa_mask))
sigaction(SIGPIPE, &new_handler, NULL);
}
}
#endif
/* /*
Initializes SSL and allocate global Initializes SSL and allocate global
context SSL_context context SSL_context
@@ -276,6 +298,7 @@ int ma_tls_start(char *errmsg, size_t errmsg_len)
SSL_CTX_sess_set_new_cb(SSL_context, ma_tls_session_cb); SSL_CTX_sess_set_new_cb(SSL_context, ma_tls_session_cb);
SSL_CTX_sess_set_remove_cb(SSL_context, ma_tls_remove_session_cb); SSL_CTX_sess_set_remove_cb(SSL_context, ma_tls_remove_session_cb);
#endif #endif
disable_sigpipe();
rc= 0; rc= 0;
ma_tls_initialized= TRUE; ma_tls_initialized= TRUE;
end: end: