Bladeren bron

refactor(server): use SignalHandler.disconnect for signal handler cleanup

Replace self-referencing delegate pattern with handler ID-based
disconnection using SignalHandler.disconnect. This eliminates the
need for nullable handler variables that reference themselves and
provides a cleaner approach to one-shot signal handlers.
Billy Barrow 1 maand geleden
bovenliggende
commit
31c51219ab
2 gewijzigde bestanden met toevoegingen van 12 en 15 verwijderingen
  1. 8 10
      src/Server/ServerInput.vala
  2. 4 5
      src/Server/ServerOutput.vala

+ 8 - 10
src/Server/ServerInput.vala

@@ -16,12 +16,11 @@ namespace Astralis {
 
         public async BinaryData? read() throws Error {
             while (chunks.length == 0 && !writes_complete) {
-                WaitHandler handler = null;
-                handler = () => {
-                    on_data_or_complete.disconnect(handler);
+                ulong handler_id = 0;
+                handler_id = on_data_or_complete.connect(() => {
+                    SignalHandler.disconnect(this, handler_id);
                     Idle.add(read.callback);
-                };
-                on_data_or_complete.connect(handler);
+                });
                 yield;
             }
             if(chunks.length == 0) {
@@ -32,12 +31,11 @@ namespace Astralis {
 
         public async BinaryData read_all() {
             while (!writes_complete) {
-                WaitHandler handler = null;
-                handler = () => {
-                    on_data_or_complete.disconnect(handler);
+                ulong handler_id = 0;
+                handler_id = on_data_or_complete.connect(() => {
+                    SignalHandler.disconnect(this, handler_id);
                     Idle.add(read_all.callback);
-                };
-                on_data_or_complete.connect(handler);
+                });
                 yield;
             }
             var data = new ByteComposition();

+ 4 - 5
src/Server/ServerOutput.vala

@@ -29,12 +29,11 @@ namespace Astralis {
             }
             
             while(chunks.length > MAX_CHUNKS) {
-                Handler pop_handler = null;
-                pop_handler = () => {
-                    on_chunk_poped.disconnect(pop_handler);
+                ulong handler_id = 0;
+                handler_id = on_chunk_poped.connect(() => {
+                    SignalHandler.disconnect(this, handler_id);
                     Idle.add(write.callback);
-                };
-                on_chunk_poped.connect(pop_handler);
+                });
                 yield;
             }