Explorar el Código

flooder: do cleanup in one place (error and normal exit). This is possible now that all processing is done using jobs, and there are no error reporters enforcing
immediate cleanup with dead vars.

ambrop7 hace 15 años
padre
commit
2939d5706d
Se han modificado 1 ficheros con 16 adiciones y 62 borrados
  1. 16 62
      flooder/flooder.c

+ 16 - 62
flooder/flooder.c

@@ -280,15 +280,23 @@ int main (int argc, char *argv[])
     // set server not ready
     // set server not ready
     server_ready = 0;
     server_ready = 0;
     
     
-    goto event_loop;
+    // enter event loop
+    BLog(BLOG_NOTICE, "entering event loop");
+    BReactor_Exec(&ss);
     
     
-    // cleanup on error
+    if (server_ready) {
+        SinglePacketBuffer_Free(&flood_buffer);
+        PacketProtoEncoder_Free(&flood_encoder);
+        PacketRecvInterface_Free(&flood_source);
+    }
+    
+    ServerConnection_Free(&server);
 fail5:
 fail5:
     if (options.ssl) {
     if (options.ssl) {
         CERT_DestroyCertificate(client_cert);
         CERT_DestroyCertificate(client_cert);
         SECKEY_DestroyPrivateKey(client_key);
         SECKEY_DestroyPrivateKey(client_key);
 fail4:
 fail4:
-        SSL_ShutdownServerSessionIDCache();
+        ASSERT_FORCE(SSL_ShutdownServerSessionIDCache() == SECSuccess)
 fail3:
 fail3:
         SSL_ClearSessionCache();
         SSL_ClearSessionCache();
         ASSERT_FORCE(NSS_Shutdown() == SECSuccess)
         ASSERT_FORCE(NSS_Shutdown() == SECSuccess)
@@ -296,79 +304,25 @@ fail2:
         ASSERT_FORCE(PR_Cleanup() == PR_SUCCESS)
         ASSERT_FORCE(PR_Cleanup() == PR_SUCCESS)
         PL_ArenaFinish();
         PL_ArenaFinish();
     }
     }
+    
     BSignal_Finish();
     BSignal_Finish();
 fail1a:
 fail1a:
     BReactor_Free(&ss);
     BReactor_Free(&ss);
 fail1:
 fail1:
-    BLog(BLOG_ERROR, "initialization failed");
-    BLog_Free();
-fail0:
-    // finish objects
-    DebugObjectGlobal_Finish();
-    return 1;
-    
-event_loop:
-    // enter event loop
-    BLog(BLOG_NOTICE, "entering event loop");
-    int ret = BReactor_Exec(&ss);
-    
-    // free reactor
-    BReactor_Free(&ss);
-    
-    // free logger
     BLog(BLOG_NOTICE, "exiting");
     BLog(BLOG_NOTICE, "exiting");
     BLog_Free();
     BLog_Free();
-    
-    // finish objects
+fail0:
     DebugObjectGlobal_Finish();
     DebugObjectGlobal_Finish();
     
     
-    return ret;
+    return 1;
 }
 }
 
 
 void terminate (void)
 void terminate (void)
 {
 {
     BLog(BLOG_NOTICE, "tearing down");
     BLog(BLOG_NOTICE, "tearing down");
     
     
-    if (server_ready) {
-        // free flooding
-        
-        // free buffer
-        SinglePacketBuffer_Free(&flood_buffer);
-        
-        // free encoder
-        PacketProtoEncoder_Free(&flood_encoder);
-        
-        // free source
-        PacketRecvInterface_Free(&flood_source);
-    }
-    
-    // free server
-    ServerConnection_Free(&server);
-    
-    if (options.ssl) {
-        // free client certificate and private key
-        CERT_DestroyCertificate(client_cert);
-        SECKEY_DestroyPrivateKey(client_key);
-        
-        // free server cache
-        ASSERT_FORCE(SSL_ShutdownServerSessionIDCache() == SECSuccess)
-        
-        // free client cache
-        SSL_ClearSessionCache();
-        
-        // free NSS
-        ASSERT_FORCE(NSS_Shutdown() == SECSuccess)
-        
-        // free NSPR
-        ASSERT_FORCE(PR_Cleanup() == PR_SUCCESS)
-        PL_ArenaFinish();
-    }
-    
-    // remove signal handler
-    BSignal_Finish();
-    
-    // exit reactor
-    BReactor_Quit(&ss, 1);
+    // exit event loop
+    BReactor_Quit(&ss, 0);
 }
 }
 
 
 void print_help (const char *name)
 void print_help (const char *name)