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