[pisa-src] r1691 - trunk/community-operator/co_client.c

  • From: Mircea Gherzan <mircea.gherzan@xxxxxxxxxxxxxx>
  • To: pisa-src@xxxxxxxxxxxxx
  • Date: Mon, 16 Nov 2009 15:54:57 +0100

Author: gherzan
Date: Mon Nov 16 15:54:57 2009
New Revision: 1691

Log:
co: upgrade the signal handling the client

The normal switch to sigaction.

Modified:
   trunk/community-operator/co_client.c

Modified: trunk/community-operator/co_client.c
==============================================================================
--- trunk/community-operator/co_client.c        Mon Nov 16 11:30:03 2009        
(r1690)
+++ trunk/community-operator/co_client.c        Mon Nov 16 15:54:57 2009        
(r1691)
@@ -3,6 +3,7 @@
  * All rights reserved.
  */
 
+#define _POSIX_C_SOURCE 200112
 #define _XOPEN_SOURCE
 #define _SVID_SOURCE
 
@@ -28,10 +29,10 @@
 #define PATH_BUFFER 1000
 
 static int check_certs_dir(void);
-static void co_client_check_certs(int sig);
+static void co_client_check_certs(int sig, siginfo_t *info, void *ctx);
 static void co_client_init(void);
 static void co_client_main(void);
-static void co_client_quit(int sig);
+static void co_client_quit(int sig, siginfo_t *info, void *ctx);
 static int copy_cert(const char * source, char * destination);
 static int create_client_socket(struct sockaddr_in6 *srv_addr);
 static int is_valid_cert(const char *filename);
@@ -218,7 +219,8 @@
  * Terminate community-operator client by receiving signal
  * @param sig signal quit code
  */
-static void co_client_quit(UNUSED int sig)
+static void co_client_quit(UNUSED int sig, UNUSED siginfo_t *info, 
+                               UNUSED void *ctx)
 {
        PISA_INFO("Shutting down Community-Operator client...\n");
        pisa_cfg_cleanup();
@@ -501,7 +503,8 @@
  * co_client_config.certs_dir expired.
  * @param sig signal code
  */
-static void co_client_check_certs(UNUSED int sigl)
+static void co_client_check_certs(UNUSED int sigl, UNUSED siginfo_t *info,
+                                       UNUSED void *ctx)
 {
        if (co_client_config.save_certs) {
                PISA_INFO("Checking existing certificates...\n");
@@ -518,21 +521,29 @@
 
 int main(void)
 {
+       struct sigaction sigact;
 
-       signal(SIGTERM, co_client_quit);
-       signal(SIGINT, co_client_quit);
-       signal(SIGQUIT, co_client_quit);
-       signal(SIGALRM, co_client_check_certs);
+       sigact.sa_flags = SA_SIGINFO;
+       sigemptyset(&sigact.sa_mask);
+
+       sigact.sa_sigaction = co_client_quit;
+       sigaction(SIGTERM, &sigact, NULL);
+       sigaction(SIGINT, &sigact, NULL);
+       sigaction(SIGQUIT, &sigact, NULL);
+
+       sigact.sa_sigaction = co_client_check_certs;
+       sigaction(SIGALRM, &sigact, NULL);
 
        co_client_init();
 
-       co_client_check_certs(SIGALRM);
+       co_client_check_certs(SIGALRM, NULL, NULL);
 
        // Only enter infinite loop if we periodically check for valid certs
        if (co_client_config.save_certs) {
                co_client_main();
        }
 
-       co_client_quit(0);
-       return 0;
+       co_client_quit(0, NULL, NULL);
+       
+       return EXIT_SUCCESS;
 }

Other related posts: