odyssey/src/mm_msg_cache.h

43 lines
660 B
C
Raw Normal View History

#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