mirror of https://github.com/yandex/odyssey.git
43 lines
660 B
C
43 lines
660 B
C
![]() |
#ifndef MM_MSG_CACHE_H_
|
||
|
#define MM_MSG_CACHE_H_
|
||
|
|
||
|
/*
|
||
|
* machinarium.
|
||
|
*
|
||
|
* cooperative multitasking engine.
|
||
|
*/
|
||
|
|
||
|
typedef struct mm_msgcache_t mm_msgcache_t;
|
||
|
|
||
|
struct mm_msgcache_t {
|
||
|
pthread_spinlock_t lock;
|
||
|
mm_list_t list;
|
||
|
int count;
|
||
|
};
|
||
|
|
||
|
void mm_msgcache_init(mm_msgcache_t*);
|
||
|
void mm_msgcache_free(mm_msgcache_t*);
|
||
|
|
||
|
mm_msg_t*
|
||
|
mm_msgcache_pop(mm_msgcache_t*);
|
||
|
|
||
|
void mm_msgcache_push(mm_msgcache_t*, mm_msg_t*);
|
||
|
|
||
|
static inline void
|
||
|
mm_msg_ref(mm_msg_t *msg)
|
||
|
{
|
||
|
msg->refs++;
|
||
|
}
|
||
|
|
||
|
static inline void
|
||
|
mm_msg_unref(mm_msgcache_t *pool, mm_msg_t *msg)
|
||
|
{
|
||
|
if (msg->refs > 0) {
|
||
|
msg->refs--;
|
||
|
return;
|
||
|
}
|
||
|
mm_msgcache_push(pool, msg);
|
||
|
}
|
||
|
|
||
|
#endif
|