Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
[simgrid.git] / teshsuite / msg / listen_async / listen_async.c
1 /* Bug report: https://github.com/mquinson/simgrid/issues/40
2  * 
3  * Task.listen used to be on async mailboxes as it always returned false.
4  * This occures in Java and C, but is only tested here in C.
5  */
6
7 #include <stdio.h>
8 #include "simgrid/msg.h"
9
10 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example");
11
12 static int server(int argc, char *argv[])
13 {
14    msg_task_t task =  MSG_task_create("a", 0, 0, (char*)"Some data");
15    MSG_task_isend(task, "mailbox");
16    
17    xbt_assert(MSG_task_listen("mailbox")); // True (1)
18    XBT_INFO("Task listen works on regular mailboxes");
19    task = NULL;
20    MSG_task_receive(&task, "mailbox");
21    xbt_assert(!strcmp("Some data", MSG_task_get_data(task)), "Data received: %s", (char*)MSG_task_get_data(task));
22    MSG_task_destroy(task);
23    XBT_INFO("Data successfully received from regular mailbox");
24    
25    MSG_mailbox_set_async("mailbox2");
26    task = MSG_task_create("b", 0, 0, (char*)"More data");
27    MSG_task_isend(task, "mailbox2");
28    
29    xbt_assert(MSG_task_listen("mailbox2")); // used to break.
30    XBT_INFO("Task listen works on asynchronous mailboxes");
31    task = NULL;
32    MSG_task_receive(&task, "mailbox2");
33    xbt_assert(!strcmp("More data", MSG_task_get_data(task)));
34    MSG_task_destroy(task);
35    XBT_INFO("Data successfully received from asynchronous mailbox");
36    
37    return 0;
38 }
39
40
41 int main(int argc, char *argv[])
42 {
43    MSG_init(&argc, argv);
44    xbt_assert(argc==2);
45    MSG_create_environment(argv[1]);
46    MSG_process_create("test", server, NULL, MSG_host_by_name("Tremblay"));
47    MSG_main();
48    
49    return 0;
50 }