build: fix travis MPI/SMP build
[charm.git] / tests / converse / megacon / specmsg.c
bloba72f514288df0e267ca86cfec8975c7813f61c99
1 #include <stdio.h>
2 #include <converse.h>
4 typedef struct specmsg_chare_s
6 int next;
8 *specmsg_chare;
10 CpmDeclareSimple(specmsg_chare);
11 #define CpmPack_specmsg_chare(x) (0)
12 #define CpmUnpack_specmsg_chare(x) (0)
14 #include "specmsg.cpm.h"
16 void Cpm_megacon_ack(CpmDestination);
18 void specmsg_fail()
20 CmiError("specmsg: CmiDeliverSpecificMsg failed.\n");
21 exit(1);
24 CpmInvokable specmsg_step1(specmsg_chare c)
26 if (c->next != 1) specmsg_fail();
27 c->next++;
30 CpmInvokable specmsg_step2(specmsg_chare c)
32 if (c->next != 2) specmsg_fail();
33 c->next++;
36 CpmInvokable specmsg_step3(specmsg_chare c)
38 if (c->next != 3) specmsg_fail();
39 c->next++;
42 CpmInvokable specmsg_step4(specmsg_chare c)
44 if (c->next != 4) specmsg_fail();
45 c->next++;
48 CpmInvokable specmsg_begin()
50 struct specmsg_chare_s c;
51 int i;
52 Cpm_specmsg_request(CpmSend(0), CmiMyPe(), &c);
53 if (CmiMyPe()==0)
54 for (i=0; i<CmiNumPes(); i++)
55 CmiDeliverSpecificMsg(CpvAccess(CpmIndex_specmsg_request));
56 c.next = 1;
57 CmiDeliverSpecificMsg(CpvAccess(CpmIndex_specmsg_step1));
58 CmiDeliverSpecificMsg(CpvAccess(CpmIndex_specmsg_step2));
59 CmiDeliverSpecificMsg(CpvAccess(CpmIndex_specmsg_step3));
60 CmiDeliverSpecificMsg(CpvAccess(CpmIndex_specmsg_step4));
61 Cpm_megacon_ack(CpmSend(0));
64 CpmInvokable specmsg_request(int pe, specmsg_chare c)
66 Cpm_specmsg_step3(CpmSend(pe), c);
67 Cpm_specmsg_step2(CpmSend(pe), c);
68 Cpm_specmsg_step4(CpmSend(pe), c);
69 Cpm_specmsg_step1(CpmSend(pe), c);
72 void specmsg_init()
74 int pe;
75 for (pe=1; pe<CmiNumPes(); pe++)
76 Cpm_specmsg_begin(CpmSend(pe));
77 specmsg_begin();
80 void specmsg_moduleinit()
82 CpmInitializeThisModule();