return fr_control_message_send(nr->control, rb, FR_CONTROL_ID_DIRECTORY, &li, sizeof(li));
}
-/** Add a worker to a network
+/** Add a worker to a network in a different thread
*
* @param nr the network
* @param worker the worker
return fr_control_message_send(nr->control, rb, FR_CONTROL_ID_WORKER, &worker, sizeof(worker));
}
+static void fr_network_worker_started_callback(void *ctx, void const *data, size_t data_size, fr_time_t now);
+
+/** Add a worker to a network in the same thread
+ *
+ * @param nr the network
+ * @param worker the worker
+ */
+void fr_network_worker_add_self(fr_network_t *nr, fr_worker_t *worker)
+{
+ fr_network_worker_started_callback(nr, &worker, sizeof(worker), fr_time_wrap(0));
+}
+
+
/** Signal the network to read from a listener
*
* @param nr the network
int fr_network_worker_add(fr_network_t *nr, fr_worker_t *worker) CC_HINT(nonnull);
+void fr_network_worker_add_self(fr_network_t *nr, fr_worker_t *worker) CC_HINT(nonnull);
+
void fr_network_listen_read(fr_network_t *nr, fr_listen_t *li) CC_HINT(nonnull);
void fr_network_listen_write(fr_network_t *nr, fr_listen_t *li, uint8_t const *packet, size_t packet_len,
goto st_fail;
}
- (void) fr_network_worker_add(sc->single_network, sc->single_worker);
+ /*
+ * Register the worker with the network, so
+ * things like fr_network_send_request() work.
+ */
+ fr_network_worker_add_self(sc->single_network, sc->single_worker);
DEBUG("Scheduler created in single-threaded mode");
if (fr_event_pre_insert(el, fr_worker_pre_event, sc->single_worker) < 0) {