Don't leak blocks if GetCheckedHandle throws.

This commit is contained in:
Rolf Bjarne Kvinge 2018-08-01 15:06:55 +02:00
Родитель b539083d6d
Коммит def474d3ac
6 изменённых файлов: 85 добавлений и 34 удалений

Просмотреть файл

@ -109,8 +109,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_stateChangeHandler, stateHandler);
nw_connection_set_state_changed_handler (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_connection_set_state_changed_handler (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -141,8 +144,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_BooleanChangeHandler, callback);
nw_connection_set_viability_changed_handler (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_connection_set_viability_changed_handler (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -162,8 +168,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_BooleanChangeHandler, callback);
nw_connection_set_better_path_available_handler (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_connection_set_better_path_available_handler (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -191,8 +200,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_PathChanged, callback);
nw_connection_set_path_changed_handler (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_connection_set_path_changed_handler (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -302,8 +314,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_ReceiveCompletion, callback);
nw_connection_receive (GetCheckedHandle (), minimumIncompleteLength, maximumLength, (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_connection_receive (GetCheckedHandle (), minimumIncompleteLength, maximumLength, (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -318,8 +333,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_ReceiveCompletionDispatchData, callback);
nw_connection_receive (GetCheckedHandle (), minimumIncompleteLength, maximumLength, (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_connection_receive (GetCheckedHandle (), minimumIncompleteLength, maximumLength, (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -337,8 +355,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_ReceiveCompletion, callback);
nw_connection_receive_message (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_connection_receive_message (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -353,8 +374,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_ReceiveCompletionDispatchData, callback);
nw_connection_receive_message (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_connection_receive_message (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -424,8 +448,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_SendCompletion, callback);
LowLevelSend (GetCheckedHandle (), buffer, context.Handle, isComplete, block_ptr_handler);
block_handler.CleanupBlock ();
try {
LowLevelSend (GetCheckedHandle (), buffer, context.Handle, isComplete, block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}

Просмотреть файл

@ -182,8 +182,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_ProtocolIterator, callback);
nw_content_context_foreach_protocol_metadata (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_content_context_foreach_protocol_metadata (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}

Просмотреть файл

@ -133,8 +133,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_ListenerStateChanged, callback);
nw_listener_set_state_changed_handler (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_listener_set_state_changed_handler (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -167,8 +170,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_NewConnection, callback);
nw_listener_set_new_connection_handler (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_listener_set_new_connection_handler (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -204,8 +210,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_AdvertisedEndpointChangedHandler, callback);
nw_listener_set_advertised_endpoint_changed_handler (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_listener_set_advertised_endpoint_changed_handler (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}

Просмотреть файл

@ -377,8 +377,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_iterateProhibitedHandler, iterationCallback);
nw_parameters_iterate_prohibited_interfaces (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_parameters_iterate_prohibited_interfaces (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
@ -408,8 +411,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_IterateProhibitedTypeHandler, callback);
nw_parameters_iterate_prohibited_interface_types (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_parameters_iterate_prohibited_interface_types (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}

Просмотреть файл

@ -121,8 +121,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_Enumerator, callback);
nw_path_enumerate_interfaces (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_path_enumerate_interfaces (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}
}

Просмотреть файл

@ -71,8 +71,11 @@ namespace Network {
BlockLiteral *block_ptr_handler = &block_handler;
block_handler.SetupBlockUnsafe (static_iterateHandler, callback);
nw_protocol_stack_iterate_application_protocols (GetCheckedHandle (), (void*) block_ptr_handler);
block_handler.CleanupBlock ();
try {
nw_protocol_stack_iterate_application_protocols (GetCheckedHandle (), (void*) block_ptr_handler);
} finally {
block_handler.CleanupBlock ();
}
}
}