linux/include/linux/delayed_call.h
<<
>>
Prefs
   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
  36