소스 검색

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)