forb_regref_t *regref;
forb_object obj;
- /* Destroy ports to prevent remote requests from coming */
- ul_list_for_each_cut(forb_port, forb, port) {
- forb_destroy_port(port);
+ /* Stop ports to prevent remote requests from coming */
+ ul_list_for_each(forb_port, forb, port) {
+ forb_stop_port(port);
}
- /* Wait for executors to finish all requests (and thus close
- * connections to peers). This is very inefficient for big
+ /* Wait for executors to finish all requests (and thus drop
+ * all references to peers). This is very inefficient for big
* number of objects, but we do not care */
gavl_cust_for_each(forb_objects_nolock, forb, obj) {
forb_executor_t *executor;
forb_executor_synchronize(executor);
}
+ /* Destroy ports - this should drop all remaining references
+ * to peers and result in closing of all remote
+ * connections. */
+ ul_list_for_each_cut(forb_port, forb, port) {
+ forb_destroy_port(port);
+ }
+
pthread_cancel(forb->execution_thread.pthread_id);
pthread_join(forb->execution_thread.pthread_id, NULL);