From 335d3bfe61d250eb83926060bbfd80d54dc243f0 Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount Date: Fri, 8 Feb 2008 20:06:06 +0000 Subject: [PATCH] ITS#5248 --- CHANGES | 1 + clients/tools/common.c | 18 +++++++++--------- servers/slapd/slapcat.c | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CHANGES b/CHANGES index 779cc3352e..e1c5c57f99 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,7 @@ OpenLDAP 2.4 Change Log OpenLDAP 2.4.8 Engineering Fixed slapd include handling (ITS#5276) + Fixed slapd non-atomic signal variables (ITS#5248) Fixed libldap_r threaded library linking (ITS#4982) Documentation DB_CONFIG.example URL wrong in comments (ITS#5288) diff --git a/clients/tools/common.c b/clients/tools/common.c index bffbf121d0..6fb304a6ec 100644 --- a/clients/tools/common.c +++ b/clients/tools/common.c @@ -149,8 +149,8 @@ static struct tool_ctrls_t { }; /* "features" */ -static int gotintr; -static int abcan; +enum { Intr_None = 0, Intr_Abandon, Intr_Cancel, Intr_Ignore }; +static volatile sig_atomic_t gotintr, abcan; #ifdef LDAP_CONTROL_X_SESSION_TRACKING @@ -558,19 +558,19 @@ tool_args( int argc, char **argv ) /* this shouldn't go here, really; but it's a feature... */ } else if ( strcasecmp( control, "abandon" ) == 0 ) { - abcan = LDAP_REQ_ABANDON; + abcan = Intr_Abandon; if ( crit ) { gotintr = abcan; } } else if ( strcasecmp( control, "cancel" ) == 0 ) { - abcan = LDAP_REQ_EXTENDED; + abcan = Intr_Cancel; if ( crit ) { gotintr = abcan; } } else if ( strcasecmp( control, "ignore" ) == 0 ) { - abcan = -1; + abcan = Intr_Ignore; if ( crit ) { gotintr = abcan; } @@ -746,7 +746,7 @@ tool_args( int argc, char **argv ) case 'P': ival = strtol( optarg, &next, 10 ); if ( next == NULL || next[0] != '\0' ) { - fprintf( stderr, "%s: unabel to parse protocol version \"%s\"\n", prog, optarg ); + fprintf( stderr, "%s: unable to parse protocol version \"%s\"\n", prog, optarg ); exit( EXIT_FAILURE ); } switch( ival ) { @@ -1720,19 +1720,19 @@ tool_check_abandon( LDAP *ld, int msgid ) int rc; switch ( gotintr ) { - case LDAP_REQ_EXTENDED: + case Intr_Cancel: rc = ldap_cancel_s( ld, msgid, NULL, NULL ); fprintf( stderr, "got interrupt, cancel got %d: %s\n", rc, ldap_err2string( rc ) ); return -1; - case LDAP_REQ_ABANDON: + case Intr_Abandon: rc = ldap_abandon_ext( ld, msgid, NULL, NULL ); fprintf( stderr, "got interrupt, abandon got %d: %s\n", rc, ldap_err2string( rc ) ); return -1; - case -1: + case Intr_Ignore: /* just unbind, ignoring the request */ return -1; } diff --git a/servers/slapd/slapcat.c b/servers/slapd/slapcat.c index 73732963fc..1d09ee513e 100644 --- a/servers/slapd/slapcat.c +++ b/servers/slapd/slapcat.c @@ -32,7 +32,7 @@ #include "slapcommon.h" #include "ldif.h" -static int gotsig; +static volatile sig_atomic_t gotsig; static RETSIGTYPE slapcat_sig( int sig ) -- 2.39.5