git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@3998
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
#include "xbt/queue.h"
#include "xbt/synchro.h"
#include "xbt/queue.h"
#include "xbt/synchro.h"
-//#include "gras/Virtu/virtu_interface.h"
-//#include "gras/DataDesc/datadesc_interface.h"
#include "gras/Transport/transport_interface.h" /* gras_select */
#include "gras/Transport/transport_interface.h" /* gras_select */
-//#include "portable.h" /* execinfo when available to propagate exceptions */
-
typedef struct s_gras_msg_listener_ {
xbt_queue_t incomming_messages;
typedef struct s_gras_msg_listener_ {
xbt_queue_t incomming_messages;
static void listener_function(void *p) {
gras_msg_listener_t me = (gras_msg_listener_t)p;
s_gras_msg_t msg;
static void listener_function(void *p) {
gras_msg_listener_t me = (gras_msg_listener_t)p;
s_gras_msg_t msg;
- xbt_ex_t e;
- int found =0;
+ xbt_ex_t e;
+ int found =0;
+ DEBUG0("I'm the listener");
- TRY {
- msg.expe = gras_trp_select(0.5);
- found =1;
- }
- CATCH(e) {
- // gras_os_sleep(0.01);
-
- }
- if (found) {
- gras_msg_recv(msg.expe, &msg);
- xbt_queue_push(me->incomming_messages, &msg);
- found =0;
- }
+ TRY {
+ DEBUG0("Select for .5 sec");
+ msg.expe = gras_trp_select(0.5);
+ found =1;
+ DEBUG0("Select returned something");
+ }
+ CATCH(e) {
+ xbt_ex_free(e);
+ }
+ if (found) {
+ gras_msg_recv(msg.expe, &msg);
+ xbt_queue_push(me->incomming_messages, &msg);
+ found =0;
+ }
gras_msg_listener_launch(xbt_queue_t msg_exchange){
gras_msg_listener_t arg = xbt_new0(s_gras_msg_listener_t,1);
gras_msg_listener_launch(xbt_queue_t msg_exchange){
gras_msg_listener_t arg = xbt_new0(s_gras_msg_listener_t,1);
+ DEBUG0("Launch listener");
arg->incomming_messages = msg_exchange;
arg->incomming_messages = msg_exchange;
- arg->listener = xbt_thread_create(listener_function,arg);
+ arg->listener = xbt_thread_create("listener",listener_function,arg);
return arg;
}
void gras_msg_listener_shutdown(gras_msg_listener_t l) {
return arg;
}
void gras_msg_listener_shutdown(gras_msg_listener_t l) {
+ DEBUG0("Listener quit");
xbt_thread_cancel(l->listener);
xbt_queue_free(&l->incomming_messages);
xbt_free(l);
xbt_thread_cancel(l->listener);
xbt_queue_free(&l->incomming_messages);
xbt_free(l);