3 /* gras message types handling */
5 /* Copyright (c) 2003, 2004, 2005, 2006, 2007 Martin Quinson. */
6 /* All rights reserved. */
8 /* This program is free software; you can redistribute it and/or modify it
9 * under the terms of the license (GNU LGPL) which comes with this package. */
12 #include "gras/Msg/msg_private.h"
13 #include "gras/Virtu/virtu_interface.h"
15 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(gras_msg);
17 extern xbt_set_t _gras_msgtype_set;
20 * Creating procdata for this module
22 static void *gras_msg_procdata_new(void)
24 gras_msg_procdata_t res = xbt_new(s_gras_msg_procdata_t, 1);
26 res->name = xbt_strdup("gras_msg");
28 res->msg_queue = xbt_dynar_new(sizeof(s_gras_msg_t), NULL);
29 res->msg_waitqueue = xbt_dynar_new(sizeof(s_gras_msg_t), NULL);
30 res->cbl_list = xbt_dynar_new(sizeof(gras_cblist_t *), gras_cbl_free);
31 res->timers = xbt_dynar_new(sizeof(s_gras_timer_t), NULL);
32 res->msg_to_receive_queue = xbt_fifo_new();
33 res->msg_to_receive_queue_meas = xbt_fifo_new();
34 res->msg_received = xbt_queue_new(0, sizeof(s_gras_msg_t));
40 * Freeing procdata for this module
42 static void gras_msg_procdata_free(void *data)
44 gras_msg_procdata_t res = (gras_msg_procdata_t) data;
46 xbt_dynar_free(&(res->msg_queue));
47 xbt_dynar_free(&(res->msg_waitqueue));
48 xbt_dynar_free(&(res->cbl_list));
49 xbt_dynar_free(&(res->timers));
50 xbt_fifo_free(res->msg_to_receive_queue);
51 xbt_fifo_free(res->msg_to_receive_queue_meas);
60 int gras_msg_libdata_id;
61 void gras_msg_register()
64 gras_procdata_add("gras_msg", gras_msg_procdata_new,
65 gras_msg_procdata_free);
69 * Initialize this submodule.
71 void gras_msg_init(void)
73 /* only initialize once */
74 if (_gras_msgtype_set != NULL)
77 VERB0("Initializing Msg");
79 _gras_msgtype_set = xbt_set_new();
81 memcpy(_GRAS_header, "GRAS", 4);
82 _GRAS_header[4] = GRAS_PROTOCOL_VERSION;
83 _GRAS_header[5] = (char) GRAS_THISARCH;
85 gras_msg_ctx_mallocator =
86 xbt_mallocator_new(1000,
87 gras_msg_ctx_mallocator_new_f,
88 gras_msg_ctx_mallocator_free_f,
89 gras_msg_ctx_mallocator_reset_f);
93 * Finalize the msg module
95 void gras_msg_exit(void)
98 xbt_set_free(&_gras_msgtype_set);
100 xbt_mallocator_free(gras_msg_ctx_mallocator);