Explorar o 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 %!s(int64=15) %!d(string=hai) anos
pai
achega
2939d5706d
Modificáronse 1 ficheiros con 16 adicións e 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
     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:
     if (options.ssl) {
         CERT_DestroyCertificate(client_cert);
         SECKEY_DestroyPrivateKey(client_key);
 fail4:
-        SSL_ShutdownServerSessionIDCache();
+        ASSERT_FORCE(SSL_ShutdownServerSessionIDCache() == SECSuccess)
 fail3:
         SSL_ClearSessionCache();
         ASSERT_FORCE(NSS_Shutdown() == SECSuccess)
@@ -296,79 +304,25 @@ fail2:
         ASSERT_FORCE(PR_Cleanup() == PR_SUCCESS)
         PL_ArenaFinish();
     }
+    
     BSignal_Finish();
 fail1a:
     BReactor_Free(&ss);
 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_Free();
-    
-    // finish objects
+fail0:
     DebugObjectGlobal_Finish();
     
-    return ret;
+    return 1;
 }
 
 void terminate (void)
 {
     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)