mirror of https://github.com/yandex/odyssey.git
50 lines
926 B
C
50 lines
926 B
C
#ifndef MM_MSG_CACHE_H
|
|
#define MM_MSG_CACHE_H
|
|
|
|
/*
|
|
* machinarium.
|
|
*
|
|
* cooperative multitasking engine.
|
|
*/
|
|
|
|
typedef struct mm_msgcache mm_msgcache_t;
|
|
|
|
struct mm_msgcache {
|
|
mm_list_t list;
|
|
uint64_t count;
|
|
uint64_t count_allocated;
|
|
uint64_t count_gc;
|
|
uint64_t size;
|
|
int gc_watermark;
|
|
};
|
|
|
|
void mm_msgcache_init(mm_msgcache_t *);
|
|
void mm_msgcache_free(mm_msgcache_t *);
|
|
void mm_msgcache_stat(mm_msgcache_t *, uint64_t *, uint64_t *, uint64_t *,
|
|
uint64_t *);
|
|
|
|
mm_msg_t *mm_msgcache_pop(mm_msgcache_t *);
|
|
|
|
void mm_msgcache_push(mm_msgcache_t *, mm_msg_t *);
|
|
|
|
static inline void mm_msgcache_set_gc_watermark(mm_msgcache_t *cache, int wm)
|
|
{
|
|
cache->gc_watermark = wm;
|
|
}
|
|
|
|
static inline void mm_msg_ref(mm_msg_t *msg)
|
|
{
|
|
msg->refs++;
|
|
}
|
|
|
|
static inline void mm_msg_unref(mm_msgcache_t *cache, mm_msg_t *msg)
|
|
{
|
|
if (msg->refs > 0) {
|
|
msg->refs--;
|
|
return;
|
|
}
|
|
mm_msgcache_push(cache, msg);
|
|
}
|
|
|
|
#endif /* MM_MSG_CACHE_H */
|