/* Prepare helper lists. */
int bound = 0;
ifacelist_t *newlist = malloc(sizeof(ifacelist_t));
- ref_init(&newlist->ref, &remove_ifacelist);
- ref_retain(&newlist->ref);
init_list(&newlist->u);
init_list(&newlist->l);
for (unsigned proto = IO_UDP; proto <= IO_TCP; ++proto) {
dt_unit_t *tu = s->handlers[proto].handler.unit;
for (unsigned i = 0; i < tu->size; ++i) {
- ref_retain((ref_t *)newlist);
s->handlers[proto].handler.thread_state[i] |= ServerReload;
s->handlers[proto].handler.thread_id[i] = thread_count++;
}
}
}
-ref_t *server_set_ifaces(server_t *server, fdset_t *fds, int index, int thread_id)
+ifacelist_t *server_set_ifaces(server_t *server, fdset_t *fds, int index, int thread_id)
{
if (server == NULL || server->ifaces == NULL || fds == NULL) {
return NULL;
}
rcu_read_unlock();
- return &server->ifaces->ref;
+ return server->ifaces;
}
#include "knot/conf/conf.h"
#include "knot/common/evsched.h"
#include "knot/common/fdset.h"
-#include "knot/common/ref.h"
#include "knot/journal/knot_lmdb.h"
#include "knot/server/dthreads.h"
#include "knot/worker/pool.h"
};
typedef struct ifacelist {
- ref_t ref;
list_t l;
list_t u;
} ifacelist_t;
*
* \return new interface list
*/
-ref_t *server_set_ifaces(server_t *server, fdset_t *fds, int index, int thread_id);
+ifacelist_t *server_set_ifaces(server_t *server, fdset_t *fds, int index, int thread_id);
unsigned *iostate = &handler->thread_state[dt_get_id(thread)];
int ret = KNOT_EOK;
- ref_t *ref = NULL;
/* Create big enough memory cushion. */
knot_mm_t mm;
update_tcp_conf(&tcp);
/* XXX This should likely be removed. */
-/* XXX Investigate the purpose of ref. */
/* Check handler state. */
if (*iostate & ServerReload) {
*iostate &= ~ServerReload;
}
/* XXX */
- ref = server_set_ifaces(handler->server, &tcp.set, IO_TCP, tcp.thread_id);
+/* XXX The return value isn't checked. */
+ server_set_ifaces(handler->server, &tcp.set, IO_TCP, tcp.thread_id);
if (tcp.set.n == 0) {
goto finish; /* Terminate on zero interfaces. */
}
free(tcp.iov[1].iov_base);
mp_delete(mm.ctx);
fdset_clear(&tcp.set);
- ref_release(ref);
return ret;
}
#endif
}
-/*! \brief Release the interface list reference and free watched descriptor set. */
-static void forget_ifaces(ifacelist_t *ifaces, struct pollfd **fds_ptr)
-{
- ref_release((ref_t *)ifaces);
- free(*fds_ptr);
- *fds_ptr = NULL;
-}
-
/*!
* \brief Make a set of watched descriptors based on the interface list.
*
iohandler_t *handler = (iohandler_t *)thread->data;
unsigned *iostate = &handler->thread_state[thr_id];
void *rq = _udp_init();
- ifacelist_t *ref = NULL;
+ ifacelist_t *ifaces = NULL;
/* Create big enough memory cushion. */
knot_mm_t mm;
nfds_t nfds = 0;
/* XXX This should likely be removed. */
-/* XXX Investigate the purpose of ref. */
/* Check handler state. */
if (*iostate & ServerReload) {
*iostate &= ~ServerReload;
udp.thread_id = handler->thread_id[thr_id];
rcu_read_lock();
- ref = handler->server->ifaces;
- nfds = track_ifaces(ref, udp.thread_id, &fds);
+ ifaces = handler->server->ifaces;
+ nfds = track_ifaces(ifaces, udp.thread_id, &fds);
rcu_read_unlock();
if (nfds == 0) {
goto finish;
finish:
_udp_deinit(rq);
- forget_ifaces(ref, &fds);
+ free(fds);
mp_delete(mm.ctx);
+
return KNOT_EOK;
}