callback-job: Replace return_false() in constructors with dedicated function

Besides being clearer, this fixes issues with GCC 15.  The latter uses
C23 by default, which changes the meaning of function declarations
without parameters such as

	bool return false();

Instead of "this function takes an unknown number of arguments", this
now equals (void), that is, "this function takes no arguments".  So we
run into incompatible pointer type warnings all over when using such
functions.  They could be cast to (void*) but this seems the cleaner
solution for this use case.
This commit is contained in:
Tobias Brunner
2025-03-19 10:22:37 +01:00
parent 38d89f57f0
commit d5d2568ff0
25 changed files with 51 additions and 33 deletions
+1 -1
View File
@@ -585,7 +585,7 @@ cmd_connection_t *cmd_connection_create()
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio(
(callback_job_cb_t)initiate, this, NULL,
(callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL));
callback_job_cancel_thread, JOB_PRIO_CRITICAL));
return &this->public;
}
@@ -340,7 +340,7 @@ METHOD(android_dns_proxy_t, handle, bool,
skt);
lib->scheduler->schedule_job(lib->scheduler,
(job_t*)callback_job_create(handle_timeout, skt,
NULL, (callback_job_cancel_t)return_false), SOCKET_TIMEOUT);
NULL, callback_job_cancel_thread), SOCKET_TIMEOUT);
}
skt->last_use = time_monotonic(NULL);
if (sendto(skt->fd, data.ptr, data.len, 0, dst->get_sockaddr(dst),
@@ -359,7 +359,7 @@ static bool setup_tun_device(private_android_service_t *this,
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create((callback_job_cb_t)handle_plain, this,
NULL, (callback_job_cancel_t)return_false));
NULL, callback_job_cancel_thread));
}
return TRUE;
}
@@ -600,7 +600,7 @@ METHOD(listener_t, alert, bool,
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio(
(callback_job_cb_t)reestablish, id, free,
(callback_job_cancel_t)return_false, JOB_PRIO_HIGH));
callback_job_cancel_thread, JOB_PRIO_HIGH));
break;
}
case ALERT_PEER_INIT_UNREACHABLE:
@@ -619,7 +619,7 @@ METHOD(listener_t, alert, bool,
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio(
(callback_job_cb_t)terminate, id, free,
(callback_job_cancel_t)return_false, JOB_PRIO_HIGH));
callback_job_cancel_thread, JOB_PRIO_HIGH));
stay_registered = FALSE;
}
else
+1 -1
View File
@@ -737,7 +737,7 @@ receiver_t *receiver_create()
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)receive_packets,
this, NULL, (callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL));
this, NULL, callback_job_cancel_thread, JOB_PRIO_CRITICAL));
return &this->public;
}
+1 -1
View File
@@ -216,7 +216,7 @@ sender_t * sender_create()
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)send_packets,
this, NULL, (callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL));
this, NULL, callback_job_cancel_thread, JOB_PRIO_CRITICAL));
return &this->public;
}
@@ -227,7 +227,7 @@ METHOD(kernel_listener_t, roam, bool,
{
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create((callback_job_cb_t)update_bypass, this,
NULL, (callback_job_cancel_t)return_false));
NULL, callback_job_cancel_thread));
return TRUE;
}
@@ -269,7 +269,7 @@ METHOD(bypass_lan_listener_t, reload_interfaces, void,
this->mutex->unlock(this->mutex);
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create((callback_job_cb_t)update_bypass, this,
NULL, (callback_job_cancel_t)return_false));
NULL, callback_job_cancel_thread));
}
METHOD(bypass_lan_listener_t, destroy, void,
@@ -706,7 +706,7 @@ static void schedule_interim(private_eap_radius_accounting_t *this,
(job_t*)callback_job_create_with_prio(
(callback_job_cb_t)send_interim,
data, (void*)destroy_interim_data,
(callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL), tv);
callback_job_cancel_thread, JOB_PRIO_CRITICAL), tv);
}
}
@@ -445,7 +445,7 @@ void eap_radius_handle_timeout(ike_sa_id_t *id)
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio(
(callback_job_cb_t)delete_all_async, NULL, NULL,
(callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL));
callback_job_cancel_thread, JOB_PRIO_CRITICAL));
}
else if (id)
{
+1 -1
View File
@@ -199,6 +199,6 @@ ha_ctl_t *ha_ctl_create(ha_segments_t *segments, ha_cache_t *cache)
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)dispatch_fifo,
this, NULL, (callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL));
this, NULL, callback_job_cancel_thread, JOB_PRIO_CRITICAL));
return &this->public;
}
+1 -1
View File
@@ -1184,7 +1184,7 @@ ha_dispatcher_t *ha_dispatcher_create(ha_socket_t *socket,
);
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)dispatch, this,
NULL, (callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL));
NULL, callback_job_cancel_thread, JOB_PRIO_CRITICAL));
return &this->public;
}
+3 -3
View File
@@ -316,7 +316,7 @@ static void start_watchdog(private_ha_segments_t *this)
this->heartbeat_active = TRUE;
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)watchdog, this,
NULL, (callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL));
NULL, callback_job_cancel_thread, JOB_PRIO_CRITICAL));
}
METHOD(ha_segments_t, handle_status, void,
@@ -404,7 +404,7 @@ static void start_heartbeat(private_ha_segments_t *this)
{
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)send_status,
this, NULL, (callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL));
this, NULL, callback_job_cancel_thread, JOB_PRIO_CRITICAL));
}
/**
@@ -451,7 +451,7 @@ static void start_autobalance(private_ha_segments_t *this)
DBG1(DBG_CFG, "scheduling HA autobalance every %ds", this->autobalance);
lib->scheduler->schedule_job(lib->scheduler,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)autobalance,
this, NULL, (callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL),
this, NULL, callback_job_cancel_thread, JOB_PRIO_CRITICAL),
this->autobalance);
}
@@ -337,7 +337,7 @@ kernel_libipsec_esp_handler_t *kernel_libipsec_esp_handler_create()
}
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create(send_esp, this, NULL,
(callback_job_cancel_t)return_false));
callback_job_cancel_thread));
return &this->public;
}
@@ -364,7 +364,7 @@ kernel_libipsec_router_t *kernel_libipsec_router_create()
charon->receiver->add_esp_cb(charon->receiver, receiver_esp_cb, NULL);
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create((callback_job_cb_t)handle_plain, this,
NULL, (callback_job_cancel_t)return_false));
NULL, callback_job_cancel_thread));
router = &this->public;
return &this->public;
+2 -2
View File
@@ -710,7 +710,7 @@ static job_requeue_t dispatch(private_smp_t *this)
fdp = malloc_thing(int);
*fdp = fd;
job = callback_job_create((callback_job_cb_t)process, fdp, free,
(callback_job_cancel_t)return_false);
callback_job_cancel_thread);
lib->processor->queue_job(lib->processor, (job_t*)job);
return JOB_REQUEUE_DIRECT;
@@ -800,7 +800,7 @@ plugin_t *smp_plugin_create()
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)dispatch, this,
NULL, (callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL));
NULL, callback_job_cancel_thread, JOB_PRIO_CRITICAL));
return &this->public.plugin;
}
@@ -210,7 +210,7 @@ METHOD(tnc_pdp_connections_t, add, void,
/* schedule timeout checking */
lib->scheduler->schedule_job_ms(lib->scheduler,
(job_t*)callback_job_create((callback_job_cb_t)check_timeouts,
this, NULL, (callback_job_cancel_t)return_false),
this, NULL, callback_job_cancel_thread),
this->timeout * 1000);
dbg_nas_user(nas_id, user_name, FALSE, "created");
+1 -1
View File
@@ -296,7 +296,7 @@ uci_control_t *uci_control_create()
{
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)receive,
this, NULL, (callback_job_cancel_t)return_false,
this, NULL, callback_job_cancel_thread,
JOB_PRIO_CRITICAL));
}
return &this->public;
+1 -1
View File
@@ -230,7 +230,7 @@ ipsec_event_relay_t *ipsec_event_relay_create()
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create((callback_job_cb_t)handle_events, this,
NULL, (callback_job_cancel_t)return_false));
NULL, callback_job_cancel_thread));
return &this->public;
}
+2 -2
View File
@@ -336,9 +336,9 @@ ipsec_processor_t *ipsec_processor_create()
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create((callback_job_cb_t)process_inbound, this,
NULL, (callback_job_cancel_t)return_false));
NULL, callback_job_cancel_thread));
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create((callback_job_cb_t)process_outbound, this,
NULL, (callback_job_cancel_t)return_false));
NULL, callback_job_cancel_thread));
return &this->public;
}
+1 -1
View File
@@ -156,7 +156,7 @@ METHOD(pt_tls_dispatcher_t, dispatch, void,
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((callback_job_cb_t)handle,
connection, (void*)cleanup,
(callback_job_cancel_t)return_false,
callback_job_cancel_thread,
JOB_PRIO_CRITICAL));
}
}
@@ -221,7 +221,7 @@ static bool watch(private_stream_service_t *this, int fd, watcher_event_t event)
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((void*)accept_async, data,
(void*)destroy_async_data, (callback_job_cancel_t)return_false,
(void*)destroy_async_data, callback_job_cancel_thread,
this->prio));
}
else
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2009-2012 Tobias Brunner
* Copyright (C) 2009-2025 Tobias Brunner
* Copyright (C) 2007-2011 Martin Willi
*
* Copyright (C) secunet Security Networks AG
@@ -131,3 +131,11 @@ callback_job_t *callback_job_create(callback_job_cb_t cb, void *data,
return callback_job_create_with_prio(cb, data, cleanup, cancel,
JOB_PRIO_MEDIUM);
}
/*
* Described in header
*/
bool callback_job_cancel_thread(void *data)
{
return FALSE;
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2012 Tobias Brunner
* Copyright (C) 2012-2025 Tobias Brunner
* Copyright (C) 2007-2011 Martin Willi
*
* Copyright (C) secunet Security Networks AG
@@ -62,6 +62,15 @@ typedef void (*callback_job_cleanup_t)(void *data);
*/
typedef bool (*callback_job_cancel_t)(void *data);
/**
* Default implementation of callback_job_cancel_t that simply returns FALSE
* to force cancellation of the thread by the processor.
*
* @param data ignored argument
* @return always returns FALSE
*/
bool callback_job_cancel_thread(void *data);
/**
* Class representing an callback Job.
*
+2 -1
View File
@@ -329,7 +329,8 @@ scheduler_t * scheduler_create()
this->heap = (event_t**)calloc(this->heap_size + 1, sizeof(event_t*));
job = callback_job_create_with_prio((callback_job_cb_t)schedule, this,
NULL, return_false, JOB_PRIO_CRITICAL);
NULL, callback_job_cancel_thread,
JOB_PRIO_CRITICAL);
lib->processor->queue_job(lib->processor, (job_t*)job);
return &this->public;
+2 -2
View File
@@ -291,7 +291,7 @@ static void notify(private_watcher_t *this, entry_t *entry,
this->jobs->insert_last(this->jobs,
callback_job_create_with_prio((void*)notify_async, data,
(void*)notify_end, (callback_job_cancel_t)return_false,
(void*)notify_end, callback_job_cancel_thread,
JOB_PRIO_CRITICAL));
}
@@ -559,7 +559,7 @@ METHOD(watcher_t, add, void,
lib->processor->queue_job(lib->processor,
(job_t*)callback_job_create_with_prio((void*)watch, this,
NULL, (callback_job_cancel_t)return_false, JOB_PRIO_CRITICAL));
NULL, callback_job_cancel_thread, JOB_PRIO_CRITICAL));
}
else
{
+1 -1
View File
@@ -587,7 +587,7 @@ static void start_echo_server(echo_server_config_t *config)
lib->processor->queue_job(lib->processor, (job_t*)
callback_job_create((void*)serve_echo, config, NULL,
(callback_job_cancel_t)return_false));
callback_job_cancel_thread));
}
/**