The Samba-Bugzilla – Attachment 10163 Details for
Bug 10640
smbd is not responding - tevent_common_signal_handler() increments non-atomic variables
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
git-am fix for 4.0.next
bug-10640-4.0.patch (text/plain), 3.82 KB, created by
Jeremy Allison
on 2014-07-30 17:07:14 UTC
(
hide
)
Description:
git-am fix for 4.0.next
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2014-07-30 17:07:14 UTC
Size:
3.82 KB
patch
obsolete
>From c0d7ca49aec779f28628cfd7e9f08694765e5fde Mon Sep 17 00:00:00 2001 >From: Jeremy Allison <jra@samba.org> >Date: Wed, 30 Jul 2014 09:58:47 -0700 >Subject: [PATCH] lib: tevent: make TEVENT_SIG_INCREMENT atomic. > >On arm platforms incrementing a variable is not >an atomic operation, so may be interrupted by >signal processing (if a signal interrupts another >signal handler). > >Use compiler built-ins to make this atomic. >__sync_fetch_and_add() works on gcc, llvm, >IBM xlC on AIX, and Intel icc (10.1 and >above). > >atomic_add_32() works on Oracle Solaris. > >Based on an inital patch from kamei@osstech.co.jp. > >Bug #10640 - smbd is not responding - tevent_common_signal_handler() increments non-atomic variables > >https://bugzilla.samba.org/show_bug.cgi?id=10640 > >Back-ported from master 536c799f00d7bdd6a574b6bdbc0e9c742eeef8b5 > >Signed-off-by: Jeremy Allison <jra@samba.org> >Reviewed-by: Volker Lendecke <Volker.Lendecke@SerNet.DE> >--- > lib/replace/replace.h | 5 +++++ > lib/replace/wscript | 25 +++++++++++++++++++++++++ > lib/tevent/tevent_signal.c | 6 ++++++ > 3 files changed, 36 insertions(+) > >diff --git a/lib/replace/replace.h b/lib/replace/replace.h >index 674a2b4..6dbb4f0 100644 >--- a/lib/replace/replace.h >+++ b/lib/replace/replace.h >@@ -871,4 +871,9 @@ int usleep(useconds_t); > void rep_setproctitle(const char *fmt, ...) PRINTF_ATTRIBUTE(1, 2); > #endif > >+/* Needed for Solaris atomic_add_XX functions. */ >+#if defined(HAVE_SYS_ATOMIC_H) >+#include <sys/atomic.h> >+#endif >+ > #endif /* _LIBREPLACE_REPLACE_H */ >diff --git a/lib/replace/wscript b/lib/replace/wscript >index 61a25ec..59aa2d1 100644 >--- a/lib/replace/wscript >+++ b/lib/replace/wscript >@@ -102,6 +102,7 @@ struct foo bar = { .y = 'X', .x = 1 }; > conf.CHECK_HEADERS('sys/extattr.h sys/ea.h sys/proplist.h sys/cdefs.h') > conf.CHECK_HEADERS('utmp.h utmpx.h lastlog.h malloc.h') > conf.CHECK_HEADERS('syscall.h sys/syscall.h inttypes.h') >+ conf.CHECK_HEADERS('sys/atomic.h') > > conf.CHECK_CODE(''' > #include <unistd.h> >@@ -209,6 +210,30 @@ struct foo bar = { .y = 'X', .x = 1 }; > msg="Checking whether we have ucontext_t", > headers='signal.h sys/ucontext.h') > >+ # Check for atomic builtins. */ >+ conf.CHECK_CODE(''' >+ int main(void) { >+ int i; >+ (void)__sync_fetch_and_add(&i, 1); >+ return 0; >+ } >+ ''', >+ 'HAVE___SYNC_FETCH_AND_ADD', >+ msg='Checking for __sync_fetch_and_add compiler builtin') >+ >+ conf.CHECK_CODE(''' >+ #include <stdint.h> >+ #include <sys/atomic.h> >+ int main(void) { >+ int32_t i; >+ atomic_add_32(&i, 1); >+ return 0; >+ } >+ ''', >+ 'HAVE_ATOMIC_ADD_32', >+ headers='stdint.h sys/atomic.h', >+ msg='Checking for atomic_add_32 compiler builtin') >+ > # these may be builtins, so we need the link=False strategy > conf.CHECK_FUNCS('strdup memmem printf memset memcpy memmove strcpy strncpy bzero', link=False) > >diff --git a/lib/tevent/tevent_signal.c b/lib/tevent/tevent_signal.c >index b5a56ef..6cddc77 100644 >--- a/lib/tevent/tevent_signal.c >+++ b/lib/tevent/tevent_signal.c >@@ -42,7 +42,13 @@ struct tevent_sigcounter { > uint32_t seen; > }; > >+#if defined(HAVE___SYNC_FETCH_AND_ADD) >+#define TEVENT_SIG_INCREMENT(s) __sync_fetch_and_add(&((s).count), 1) >+#elif defined(HAVE_ATOMIC_ADD_32) >+#define TEVENT_SIG_INCREMENT(s) atomic_add_32(&((s).count), 1) >+#else > #define TEVENT_SIG_INCREMENT(s) (s).count++ >+#endif > #define TEVENT_SIG_SEEN(s, n) (s).seen += (n) > #define TEVENT_SIG_PENDING(s) ((s).seen != (s).count) > >-- >2.0.0.526.g5318336 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
vl
:
review+
Actions:
View
Attachments on
bug 10640
:
9994
|
10003
|
10162
| 10163