all load balancers inherit from BaseLB now.
[charm.git] / src / ck-ldb / NullLB.C
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 #include <charm++.h>
9 #include <BaseLB.h>
10 #include "NullLB.h"
11
12 void CreateNullLB(void)
13 {
14   CProxy_NullLB::ckNew();
15 }
16
17 static void initNullLB(void) {
18 #if CMK_LBDB_ON
19 //  LBSetDefaultCreate(CreateNullLB);
20 #endif
21 }
22
23 #if CMK_LBDB_ON
24 void NullLB::init(void)
25 {
26   // if (CkMyPe() == 0) CkPrintf("[%d] NullLB created\n",CkMyPe());
27   hasNullLB = 1;
28   theLbdb=CProxy_LBDatabase(lbdb).ckLocalBranch();
29   receiver = theLbdb->
30     AddLocalBarrierReceiver((LDBarrierFn)(staticAtSync),
31                             (void*)(this));
32 }
33
34 NullLB::~NullLB()
35 {
36   theLbdb=CProxy_LBDatabase(lbdb).ckLocalBranch();
37   theLbdb->RemoveLocalBarrierReceiver(receiver);
38 }
39
40 void NullLB::staticAtSync(void* data)
41 {
42   // if there is other LBs, just return
43   // CmiPrintf("numLoadBalancers = %d\n", numLoadBalancers);
44   if (numLoadBalancers > 1) return;
45
46   NullLB *me = (NullLB*)(data);
47   me->AtSync();
48 }
49
50 void NullLB::AtSync()
51 {
52   //Reset the database so it doesn't waste memory
53   theLbdb->ClearLoads();
54   
55   //We don't *do* any migrations, so they're already done!
56   thisProxy[CkMyPe()].migrationsDone();
57 }
58 void NullLB::migrationsDone(void)
59 {
60   theLbdb->ResumeClients();
61 }
62 #else
63 /*No load balancer-- still need definitions to prevent linker errors.
64 I sure wish we had #ifdefs in the .ci file-- then we could avoid all this.
65 */
66 void NullLB::init(void) {}
67 void NullLB::staticAtSync(void* data) {}
68 void NullLB::AtSync() {}
69 void NullLB::migrationsDone(void) {}
70 #endif
71
72 #include "NullLB.def.h"