/** * _kh_cancel_sub: * @sub a #kqueue_sub * * Stops monitoring on a subscription. * * Returns: %TRUE **/ gboolean _kh_cancel_sub (kqueue_sub *sub) { gboolean removed = FALSE; g_assert (kqueue_socket_pair[0] != -1); g_assert (sub != NULL); _km_remove (sub); G_LOCK (hash_lock); removed = g_hash_table_remove (subs_hash_table, GINT_TO_POINTER (sub->fd)); G_UNLOCK (hash_lock); if (removed) { /* fd will be closed in the kqueue thread */ _kqueue_thread_remove_fd (sub->fd); /* Bump the kqueue thread. It will pick up a new sub entry to remove*/ if (!_ku_write (kqueue_socket_pair[0], "R", 1)) KH_W ("Failed to bump the kqueue thread (remove fd, error %d)", errno); } return TRUE; }
/** * _kh_cancel_sub: * @sub a #kqueue_sub * * Stops monitoring on a subscription. * * Returns: %TRUE **/ gboolean _kh_cancel_sub (kqueue_sub *sub) { gboolean missing = FALSE; g_assert (kqueue_socket_pair[0] != -1); g_assert (sub != NULL); G_LOCK (hash_lock); missing = !g_hash_table_remove (subs_hash_table, GINT_TO_POINTER (sub->fd)); G_UNLOCK (hash_lock); if (missing) { /* If there were no fd for this subscription, file is still * missing. */ KH_W ("Removing subscription from missing"); _km_remove (sub); } else { /* fd will be closed in the kqueue thread */ _kqueue_thread_remove_fd (sub->fd); /* Bump the kqueue thread. It will pick up a new sub entry to remove*/ if (!_ku_write (kqueue_socket_pair[0], "R", 1)) KH_W ("Failed to bump the kqueue thread (remove fd, error %d)", errno); } return TRUE; }