瀏覽代碼

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 15 年之前
父節點
當前提交
2939d5706d
共有 1 個文件被更改,包括 16 次插入62 次删除
  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)