Commit b0648008 authored by unknown's avatar unknown

bug#7690 - ndb startup with shm, use sigaction to escape SA_RESETHAND


configure.in:
  Check for sigaction used in SHM_Transporter
ndb/src/common/transporter/SHM_Transporter.cpp:
  remove unused variable
ndb/src/common/transporter/TransporterRegistry.cpp:
  1) remove unused variable
  2) Use sigaction instead of signal to install signal handler
     This as signal uses SA_RESETHAND
parent 51cae387
......@@ -1924,7 +1924,7 @@ AC_CHECK_FUNCS(alarm bcmp bfill bmove bzero chsize cuserid fchmod fcntl \
pthread_key_delete pthread_rwlock_rdlock pthread_setprio \
pthread_setprio_np pthread_setschedparam pthread_sigmask readlink \
realpath rename rint rwlock_init setupterm \
shmget shmat shmdt shmctl \
shmget shmat shmdt shmctl sigaction \
sighold sigset sigthreadmask \
snprintf socket stpcpy strcasecmp strerror strnlen strpbrk strstr strtol \
strtoll strtoul strtoull tell tempnam thr_setconcurrency vidattr)
......@@ -3097,7 +3097,8 @@ ndb_transporter_opt_objs=""
if test "$ac_cv_func_shmget" = "yes" &&
test "$ac_cv_func_shmat" = "yes" &&
test "$ac_cv_func_shmdt" = "yes" &&
test "$ac_cv_func_shmctl" = "yes"
test "$ac_cv_func_shmctl" = "yes" &&
test "$ac_cv_func_sigaction" = "yes"
then
AC_DEFINE([NDB_SHM_TRANSPORTER], [1],
[Including Ndb Cluster DB shared memory transporter])
......
......@@ -26,8 +26,6 @@
#include <InputStream.hpp>
#include <OutputStream.hpp>
extern int g_shm_pid;
SHM_Transporter::SHM_Transporter(TransporterRegistry &t_reg,
const char *lHostName,
const char *rHostName,
......
......@@ -50,8 +50,6 @@
#include <EventLogger.hpp>
extern EventLogger g_eventLogger;
int g_shm_pid = 0;
SocketServer::Session * TransporterService::newSession(NDB_SOCKET_TYPE sockfd)
{
DBUG_ENTER("SocketServer::Session * TransporterService::newSession");
......@@ -1322,7 +1320,22 @@ TransporterRegistry::startReceiving()
#ifdef NDB_SHM_TRANSPORTER
m_shm_own_pid = getpid();
signal(SIGUSR1, shm_sig_handler);
struct sigaction sa;
sa.sa_handler = shm_sig_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
int ret;
while((ret = sigaction(SIGUSR1, &sa, 0)) == -1 && errno == EINTR);
if(ret != 0)
{
g_eventLogger.error("Failed to install signal handler for SHM transporter"
" errno: %d (%s)", errno,
#ifdef HAVE_STRERROR
strerror(errno));
#else
"");
#endif
}
#endif
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment