| | |
| | | |
| | | template <typename ELEM_T> SHMQueue<ELEM_T>::~SHMQueue() { |
| | | LoggerFactory::getLogger()->debug("SHMQueue destroy"); |
| | | if(owner) { |
| | | delete queue; |
| | | hashtable_remove(hashtable, mkey); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | template <typename ELEM_T> |
| | | bool SHMQueue<ELEM_T>::bind(int key, bool force) { |
| | | |
| | | |
| | | hashtable_lock(hashtable); |
| | | void *tmp_ptr = hashtable_get(hashtable, key); |
| | | if (tmp_ptr == NULL || tmp_ptr == (void *)1 || force) { |
| | | queue = new LockFreeQueue<ELEM_T, SHM_Allocator>(mqsize); |
| | | hashtable_put(hashtable, key, (void *)queue); |
| | | mkey = key; |
| | | owner = true; |
| | | hashtable_unlock(hashtable); |
| | | return true; |
| | | } |
| | | |
| | | hashtable_unlock(hashtable); |
| | | return false; |
| | | } |
| | | |