diff options
Diffstat (limited to 'src/core/init.h')
| -rw-r--r-- | src/core/init.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/core/init.h b/src/core/init.h index ffcebf64..d21bb4c5 100644 --- a/src/core/init.h +++ b/src/core/init.h @@ -1,5 +1,7 @@ // -// Copyright 2016 Garrett D'Amore <garrett@damore.org> +// Copyright 2017 Garrett D'Amore <garrett@damore.org> +// Copyright 2017 Capitar IT Group BV <info@capitar.com> +// Copyright 2017 Staysail Systems, Inc. <info@staysail.tech> // // This software is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this @@ -21,4 +23,23 @@ int nni_init(void); // that all resources used by the library are released back to the system. void nni_fini(void); +typedef struct nni_initializer { + int (*i_init)(void); // i_init is called exactly once + void (*i_fini)(void); // i_fini is called on shutdown + int i_once; // private -- initialize to zero + nni_list_node i_node; // private -- initialize to zero +} nni_initializer; + +// nni_initialize will call the initialization routine exactly once. This is +// done efficiently, so that if the caller has initialized already, then +// subsequent calls are "cheap" (no synchronization cost). The initialization +// function must not itself cause any further calls to nni_initialize; the +// function should limit itself to initialization of locks and static data +// structures. When shutting down, the finalizer will be called. The +// order in which finalizers are called is unspecified. +// +// An initializer may fail (due to resource exhaustion), in which case the +// return value of nni_initialize will be non-zero. +int nni_initialize(nni_initializer *); + #endif // CORE_INIT_H |
