20 void msg_allocator_init(
void)
22 array_init(free_list);
23 array_init(free_gvt_list);
26 void msg_allocator_fini(
void)
28 while(!array_is_empty(free_list)){
31 array_fini(free_list);
33 while(!array_is_empty(free_gvt_list)){
34 mm_free(array_pop(free_gvt_list));
36 array_fini(free_gvt_list);
39 struct lp_msg* msg_allocator_alloc(
unsigned payload_size)
42 if(
unlikely(payload_size > BASE_PAYLOAD_SIZE)){
45 (payload_size - BASE_PAYLOAD_SIZE)
50 if(
unlikely(array_is_empty(free_list))){
55 return array_pop(free_list);
58 void msg_allocator_free(
struct lp_msg *msg)
61 array_push(free_list, msg);
67 void msg_allocator_free_at_gvt(
struct lp_msg *msg)
69 array_push(free_gvt_list, msg);
72 void msg_allocator_fossil_collect(
simtime_t current_gvt)
76 struct lp_msg *msg = array_get_at(free_gvt_list, i);
80 if (current_gvt > msg->
dest_t) {
81 msg_allocator_free(msg);
83 array_get_at(free_gvt_list, j) = msg;
92 unsigned event_type,
const void *payload,
unsigned payload_size);