UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
resource_manager_t Class Reference
Collaboration diagram for resource_manager_t:
Collaboration graph

Public Types

typedef map< string, pair< resource *, int > > obj_map_t
 

Public Member Functions

 resource_manager_t ()
 
 ~resource_manager_t ()
 
resource * acquire (string name, type_t type, options_t const &options)
 
void lock ()
 
void release (string name, type_t type)
 
void unlock ()
 

Private Attributes

pthread_mutex_t m_access_lock
 
pthread_mutex_t m_excl_lock
 
obj_map_t m_objs
 

Detailed Description

Definition at line 165 of file resource_manager.cpp.

Member Typedef Documentation

◆ obj_map_t

map<string, pair<resource *, int> > resource_manager_t::obj_map_t

Definition at line 167 of file resource_manager.cpp.

Constructor & Destructor Documentation

◆ resource_manager_t()

resource_manager_t::resource_manager_t ( )
inline

Definition at line 169 of file resource_manager.cpp.

169 {
170 pthread_mutex_init(&m_access_lock, NULL);
171 pthread_mutex_init(&m_excl_lock, NULL);
172 }
pthread_mutex_t m_excl_lock
pthread_mutex_t m_access_lock

References m_access_lock, and m_excl_lock.

◆ ~resource_manager_t()

resource_manager_t::~resource_manager_t ( )
inline

Definition at line 174 of file resource_manager.cpp.

174 {
175 for_each(m_objs.begin(),
176 m_objs.end(), func_delete);
177 pthread_mutex_destroy(&m_access_lock);
178 pthread_mutex_destroy(&m_excl_lock);
179 }
static void func_delete(pair< string, pair< resource *, int > > arg)

References func_delete(), m_access_lock, m_excl_lock, and m_objs.

Here is the call graph for this function:

Member Function Documentation

◆ acquire()

resource * resource_manager_t::acquire ( string name,
type_t type,
options_t const & options )
inline

Definition at line 189 of file resource_manager.cpp.

189 {
190 resource *ret;
192 string item_name = name + "#" + resource::get_suffix(type);
193
194 obj_map_t::iterator it = m_objs.find(item_name);
195 if(it == m_objs.end()) {
196 // create
198 m_objs[item_name] = pair<resource *, int>(ret,
199 1);
200 } else {
201 it->second.second += 1;
202 ret = it->second.first;
203 }
204 return ret;
205 }
static resource * create(type_t type, options_t const &options)
static string get_suffix(type_t type)
class generic_lock_guard< pthread_mutex_t, pthread_mutex_lock, pthread_mutex_unlock > pthread_mutex_guard
Definition lock_guard.h:43
Option::OptType type
Definition settings.cpp:194
const char * name
Definition settings.cpp:193
Definition rtp.c:253

References resource::create(), resource::get_suffix(), lock(), m_access_lock, m_objs, name, and type.

Referenced by rm_acquire_shared_lock(), rm_get_shm(), and rm_singleton().

Here is the call graph for this function:

◆ lock()

void resource_manager_t::lock ( )
inline

Definition at line 181 of file resource_manager.cpp.

181 {
182 pthread_mutex_lock(&m_excl_lock);
183 }

References m_excl_lock.

Referenced by acquire(), release(), and rm_lock().

◆ release()

void resource_manager_t::release ( string name,
type_t type )
inline

Definition at line 207 of file resource_manager.cpp.

207 {
209 string item_name = name + "#" + resource::get_suffix(type);
210
211 obj_map_t::iterator it = m_objs.find(item_name);
212 if(it == m_objs.end()) {
213 // create
214 throw logic_error("No such object.");
215 } else {
216 it->second.second -= 1;
217 if(it->second.second == 0) { // ref count == 0
218 delete it->second.first;
219 m_objs.erase(it);
220 }
221 }
222 }

References resource::get_suffix(), lock(), m_access_lock, m_objs, name, and type.

Referenced by rm_release_shared_lock().

Here is the call graph for this function:

◆ unlock()

void resource_manager_t::unlock ( )
inline

Definition at line 185 of file resource_manager.cpp.

185 {
186 pthread_mutex_unlock(&m_excl_lock);
187 }

References m_excl_lock.

Referenced by rm_unlock().

Member Data Documentation

◆ m_access_lock

pthread_mutex_t resource_manager_t::m_access_lock
private

Definition at line 225 of file resource_manager.cpp.

Referenced by resource_manager_t(), ~resource_manager_t(), acquire(), and release().

◆ m_excl_lock

pthread_mutex_t resource_manager_t::m_excl_lock
private

Definition at line 226 of file resource_manager.cpp.

Referenced by resource_manager_t(), ~resource_manager_t(), lock(), and unlock().

◆ m_objs

obj_map_t resource_manager_t::m_objs
private

Definition at line 227 of file resource_manager.cpp.

Referenced by ~resource_manager_t(), acquire(), and release().


The documentation for this class was generated from the following file: