62#define TYPE_SINGLETON 2
65using std::logic_error;
109 pthread_mutex_init(&
m_lock, NULL);
113 pthread_mutex_destroy(&
m_lock);
160static void func_delete(pair<
string, pair<resource *, int> > arg);
161static void func_delete(pair<
string, pair<resource *, int> > arg) {
162 delete arg.second.first;
194 obj_map_t::iterator it =
m_objs.find(item_name);
198 m_objs[item_name] = pair<resource *, int>(ret,
201 it->second.second += 1;
202 ret = it->second.first;
211 obj_map_t::iterator it =
m_objs.find(item_name);
214 throw logic_error(
"No such object.");
216 it->second.second -= 1;
217 if(it->second.second == 0) {
218 delete it->second.first;
242 throw logic_error(
"Wrong typeid");
249 return string(
"mutex");
251 return string(
"SHM");
253 return string(
"singleton");
255 throw logic_error(
"Wrong typeid");
static af_result_code init(struct module *parent, const char *cfg, void **state)
static void done(void *state)
resource * acquire(string name, type_t type, options_t const &options)
pthread_mutex_t m_excl_lock
void release(string name, type_t type)
map< string, pair< resource *, int > > obj_map_t
pthread_mutex_t m_access_lock
static resource * create(type_t type, options_t const &options)
static string get_suffix(type_t type)
shm(shm_opts const &opts)
singleton_deleter_t m_done
singleton_initializer_t m_init
singleton_opts(singleton_initializer_t init, void *data, singleton_deleter_t done)
singleton(singleton_opts const &opts)
class generic_lock_guard< pthread_mutex_t, pthread_mutex_lock, pthread_mutex_unlock > pthread_mutex_guard
pthread_mutex_t * rm_acquire_shared_lock(const char *name)
static resource_manager_t resource_manager
void rm_release_shared_lock(const char *name)
void * rm_get_shm(const char *name, int size)
static void func_delete(pair< string, pair< resource *, int > > arg)
void * rm_singleton(const char *name, singleton_initializer_t initializer, void *data, singleton_deleter_t done)
void *(* singleton_initializer_t)(void *)
void(* singleton_deleter_t)(void *)