delayed_call.h (709B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _DELAYED_CALL_H 3#define _DELAYED_CALL_H 4 5/* 6 * Poor man's closures; I wish we could've done them sanely polymorphic, 7 * but... 8 */ 9 10struct delayed_call { 11 void (*fn)(void *); 12 void *arg; 13}; 14 15#define DEFINE_DELAYED_CALL(name) struct delayed_call name = {NULL, NULL} 16 17/* I really wish we had closures with sane typechecking... */ 18static inline void set_delayed_call(struct delayed_call *call, 19 void (*fn)(void *), void *arg) 20{ 21 call->fn = fn; 22 call->arg = arg; 23} 24 25static inline void do_delayed_call(struct delayed_call *call) 26{ 27 if (call->fn) 28 call->fn(call->arg); 29} 30 31static inline void clear_delayed_call(struct delayed_call *call) 32{ 33 call->fn = NULL; 34} 35#endif