Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Sebastian Schrader
Kea
Commits
60ad1417
Commit
60ad1417
authored
Nov 11, 2015
by
Francis Dupont
Browse files
[master] Merged trac4060a (Kea multi-threaded)
parents
88788b9f
e7026936
Changes
7
Hide whitespace changes
Inline
Side-by-side
configure.ac
View file @
60ad1417
...
...
@@ -158,6 +158,7 @@ CXX_VERSION="unknown"
if test "$SUNCXX" = "yes"; then
CXX_VERSION=`$CXX -V 2> /dev/null | head -1`
CXXFLAGS="$CXXFLAGS -library=stlport4 -features=tmplife -features=tmplrefstatic"
KEA_CXXFLAGS="$KEA_CXXFLAGS -mt"
MULTITHREADING_FLAG="-mt"
fi
...
...
@@ -194,6 +195,7 @@ case "$host" in
MULTITHREADING_FLAG=-pthread
;;
esac
KEA_CXXFLAGS="$KEA_CXXFLAGS $MULTITHREADING_FLAG"
# Don't use -Werror if configured not to
AC_ARG_WITH(werror,
...
...
@@ -1008,7 +1010,7 @@ else
done
fi
LOG4CPLUS_LIBS="$LOG4CPLUS_LIBS -llog4cplus
$MULTITHREADING_FLAG
"
LOG4CPLUS_LIBS="$LOG4CPLUS_LIBS -llog4cplus"
AC_SUBST(LOG4CPLUS_LIBS)
AC_SUBST(LOG4CPLUS_INCLUDES)
...
...
@@ -1016,7 +1018,7 @@ AC_SUBST(LOG4CPLUS_INCLUDES)
CPPFLAGS_SAVED=$CPPFLAGS
CPPFLAGS="$LOG4CPLUS_INCLUDES $CPPFLAGS"
LIBS_SAVED="$LIBS"
LIBS="$LOG4CPLUS_LIBS $LIBS"
LIBS="$LOG4CPLUS_LIBS
$MULTITHREADING_FLAG
$LIBS"
AC_CHECK_HEADERS([log4cplus/logger.h],,AC_MSG_ERROR([Missing required header files.]))
AC_LINK_IFELSE(
...
...
@@ -1072,10 +1074,7 @@ fi
CPPFLAGS="$CPPFLAGS $CPPFLAGS_BOOST_THREADCONF"
# Can be required by gtest, boost and perhaps still asio
PTHREAD_LDFLAGS=
AC_CHECK_LIB(pthread, pthread_create,[ PTHREAD_LDFLAGS=-lpthread ], [])
AC_SUBST(PTHREAD_LDFLAGS)
AC_SUBST(MULTITHREADING_FLAG)
AC_CHECK_LIB(pthread, pthread_create,[ LDFLAGS="$LDFLAGS -lpthread" ], [])
#
# Check availability of gtest, which will be used for unit tests.
...
...
@@ -1116,13 +1115,6 @@ if test "x$enable_gtest" = "xyes" ; then
GTEST_LDFLAGS="\$(top_builddir)/ext/gtest/libgtest.a"
DISTCHECK_GTEST_CONFIGURE_FLAG="--with-gtest-source=$GTEST_SOURCE"
GTEST_INCLUDES="-I$GTEST_SOURCE -I$GTEST_SOURCE/include"
# See $GTEST_SOURCE/include/gtest/internal/gtest-port.h
# about GTEST_HAS_PTHREAD.
case "$host" in
*-solaris*|*-linux*|*-hpux*)
GTEST_LDADD="$GTEST_LDADD $PTHREAD_LDFLAGS"
;;
esac
fi
if test "$gtest_path" != "no" ; then
...
...
@@ -1156,48 +1148,6 @@ if test "x$enable_gtest" = "xyes" ; then
GTEST_LDFLAGS="-L$dir/lib"
GTEST_LDADD="-lgtest"
GTEST_FOUND="true"
# There is no gtest-config script on this
# system, which is supposed to inform us
# whether we need pthreads as well (a
# gtest compile-time option). So we still
# need to test that manually.
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $GTEST_INCLUDES"
LDFLAGS_SAVED="$LDFLAGS"
LDFLAGS="$LDFLAGS $GTEST_LDFLAGS"
LIBS_SAVED=$LIBS
LIBS="$LIBS $GTEST_LDADD"
AC_MSG_CHECKING([Checking whether gtest tests need pthreads])
# First try to compile without pthreads
AC_TRY_LINK([
#include <gtest/gtest.h>
],[
int i = 0;
char* c = NULL;
::testing::InitGoogleTest(&i, &c);
return (0);
],
[ AC_MSG_RESULT(no) ],
[
LIBS="$SAVED_LIBS $GTEST_LDADD $PTHREAD_LDFLAGS"
# Now try to compile with pthreads
AC_TRY_LINK([
#include <gtest/gtest.h>
],[
int i = 0;
char* c = NULL;
::testing::InitGoogleTest(&i, &c);
return (0);
],
[ AC_MSG_RESULT(yes)
GTEST_LDADD="$GTEST_LDADD $PTHREAD_LDFLAGS"
],
# Apparently we can't compile it at all
[ AC_MSG_ERROR(unable to compile with gtest) ])
])
CPPFLAGS=$CPPFLAGS_SAVED
LDFLAGS=$LDFLAGS_SAVED
LIBS=$LIBS_SAVED
break
fi
done
...
...
@@ -1225,7 +1175,7 @@ CPPFLAGS="$CPPFLAGS -I\$(top_srcdir)/ext/coroutine"
# Doesn't seem to be required?
CPPFLAGS="$CPPFLAGS -DBOOST_ASIO_HEADER_ONLY"
#
# Disable threads:
Currently we don't use th
em
.
# Disable threads:
they seems to break things on some syst
em
s
CPPFLAGS="$CPPFLAGS -DBOOST_ASIO_DISABLE_THREADS=1"
# We tried to stay header only
...
...
src/lib/hooks/tests/Makefile.am
View file @
60ad1417
SUBDIRS
=
.
AM_CPPFLAGS
=
-I
$(top_builddir)
/src/lib
-I
$(top_srcdir)
/src/lib
AM_CPPFLAGS
+=
$(BOOST_INCLUDES)
$(MULTITHREADING_FLAG)
AM_CPPFLAGS
+=
$(BOOST_INCLUDES)
AM_CXXFLAGS
=
$(KEA_CXXFLAGS)
# Some versions of GCC warn about some versions of Boost regarding
...
...
src/lib/util/process_spawn.cc
View file @
60ad1417
...
...
@@ -202,9 +202,15 @@ pid_t
ProcessSpawnImpl
::
spawn
()
{
// Protect us against SIGCHLD signals
sigset_t
sset
;
sigset_t
osset
;
sigemptyset
(
&
sset
);
sigaddset
(
&
sset
,
SIGCHLD
);
sigprocmask
(
SIG_BLOCK
,
&
sset
,
0
);
pthread_sigmask
(
SIG_BLOCK
,
&
sset
,
&
osset
);
if
(
sigismember
(
&
osset
,
SIGCHLD
))
{
isc_throw
(
ProcessSpawnError
,
"spawn() called from a thread where SIGCHLD is blocked"
);
}
// Create the child
pid_t
pid
=
fork
();
if
(
pid
<
0
)
{
...
...
@@ -212,7 +218,7 @@ ProcessSpawnImpl::spawn() {
}
else
if
(
pid
==
0
)
{
// We're in the child process.
sigprocmask
(
SIG_
UNBLOC
K
,
&
sset
,
0
);
sigprocmask
(
SIG_
SETMAS
K
,
&
o
sset
,
0
);
// Run the executable.
if
(
execvp
(
executable_
.
c_str
(),
args_
)
!=
0
)
{
// We may end up here if the execvp failed, e.g. as a result
...
...
@@ -224,8 +230,14 @@ ProcessSpawnImpl::spawn() {
}
// We're in the parent process.
process_state_
.
insert
(
std
::
pair
<
pid_t
,
ProcessState
>
(
pid
,
ProcessState
()));
sigprocmask
(
SIG_UNBLOCK
,
&
sset
,
0
);
try
{
process_state_
.
insert
(
std
::
pair
<
pid_t
,
ProcessState
>
(
pid
,
ProcessState
()));
}
catch
(...)
{
pthread_sigmask
(
SIG_SETMASK
,
&
osset
,
0
);
throw
;
}
pthread_sigmask
(
SIG_SETMASK
,
&
osset
,
0
);
return
(
pid
);
}
...
...
src/lib/util/signal_set.cc
View file @
60ad1417
...
...
@@ -270,7 +270,7 @@ SignalSet::maskSignals(const int mask) const {
it
!=
registered_signals_
->
end
();
++
it
)
{
sigaddset
(
&
new_set
,
*
it
);
}
sigproc
mask
(
mask
,
&
new_set
,
0
);
pthread_sig
mask
(
mask
,
&
new_set
,
0
);
}
void
...
...
src/lib/util/signal_set.h
View file @
60ad1417
...
...
@@ -21,6 +21,7 @@
#include
<boost/shared_ptr.hpp>
#include
<set>
#include
<list>
#include
<pthread.h>
#include
<signal.h>
namespace
isc
{
...
...
src/lib/util/threads/Makefile.am
View file @
60ad1417
...
...
@@ -2,12 +2,11 @@ SUBDIRS = . tests
AM_CXXFLAGS
=
$(KEA_CXXFLAGS)
AM_CPPFLAGS
=
-I
$(top_srcdir)
/src/lib
-I
$(top_builddir)
/src/lib
AM_CPPFLAGS
+=
$(BOOST_INCLUDES)
$(MULTITHREADING_FLAG)
AM_CPPFLAGS
+=
$(BOOST_INCLUDES)
lib_LTLIBRARIES
=
libkea-threads.la
libkea_threads_la_SOURCES
=
sync.h sync.cc
libkea_threads_la_SOURCES
+=
thread.h thread.cc
libkea_threads_la_LIBADD
=
$(top_builddir)
/src/lib/exceptions/libkea-exceptions.la
libkea_threads_la_LIBADD
+=
$(PTHREAD_LDFLAGS)
CLEANFILES
=
*
.gcno
*
.gcda
src/lib/util/threads/tests/Makefile.am
View file @
60ad1417
SUBDIRS
=
.
AM_CPPFLAGS
=
-I
$(top_builddir)
/src/lib
-I
$(top_srcdir)
/src/lib
AM_CPPFLAGS
+=
$(BOOST_INCLUDES)
$(MULTITHREADING_FLAG)
AM_CPPFLAGS
+=
$(BOOST_INCLUDES)
# XXX: we'll pollute the top builddir for creating a temporary test file
# # used to bind a UNIX domain socket so we can minimize the risk of exceeding
# # the limit of file name path size.
...
...
@@ -26,7 +26,7 @@ run_unittests_SOURCES += lock_unittest.cc
run_unittests_SOURCES
+=
condvar_unittest.cc
run_unittests_CPPFLAGS
=
$(AM_CPPFLAGS)
$(GTEST_INCLUDES)
run_unittests_LDFLAGS
=
$(AM_LDFLAGS)
$(GTEST_LDFLAGS)
$(PTHREAD_LDFLAGS)
run_unittests_LDFLAGS
=
$(AM_LDFLAGS)
$(GTEST_LDFLAGS)
run_unittests_LDADD
=
$(top_builddir)
/src/lib/util/threads/libkea-threads.la
run_unittests_LDADD
+=
$(top_builddir)
/src/lib/util/unittests/libutil_unittests.la
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment