Drop requirement for user code to call CBase_foo::pup(p)
authorPhil Miller <mille121@illinois.edu>
Fri, 2 Dec 2011 08:11:21 +0000 (02:11 -0600)
committerPhil Miller <mille121@illinois.edu>
Mon, 26 Dec 2011 08:43:12 +0000 (02:43 -0600)
commit0bd6105523351c97b7d6424c3b0227d6e5326498
tree2445f9ac5c169432cb47af431af550b22333e7a4
parent36ab0d6516c0a116c26b21a407491d23abd77fc8
Drop requirement for user code to call CBase_foo::pup(p)

Requiring users to explicitly call CBase_foo::pup(p) at the beginning
of any chare's pup routine was easy to forget and led to substantial
frustration. Thus, make the system responsible for this, and take the
burden off users. Update tests and documentation to match.

Add an additional virtual method base_pup(PUP::er &p) to take over the
responsibility of code that was previously in the user-called base
class pup() methods. Insert calls to base_pup() in the main
array-migration code paths.

Currently *not* modified are the checkpoint code and migration for
plain chares. The fault-tolerance code paths under various #ifdef
guards are also not changed.

After consideration, I'm fairly confident that this change will not
break existing code that directly inherits from
Chare/Group/NodeGroup/ArrayElementND, so long as its pup routine stays
old-school to match (i.e. calls Chare::pup directly). The
implementation of base_pup is empty in those classes, and the
generated class's base_pup would call the base class pup routines.

Existing code with user-defined inheritance is a tricky case where
this change may break. In the simplest variants, some data might run
through pup twice. More disconcerting is the possibility of double
allocation on unpacking and memory leaks. If there is any actual code
that encounters this problem, I'll be happy to provide the labor
necessary to repair it.
20 files changed:
doc/charm++/arrays.tex
doc/charm++/loadb.tex
doc/charm++/pup.tex
doc/charm++/sdag.tex
src/ck-core/charm++.h
src/ck-core/cklocation.C
tests/charm++/chkpt/hello.C
tests/charm++/commtest/comlib/bench.C
tests/charm++/commtest/comlib/benchmulti.C
tests/charm++/commtest/comlib/benchsectionmulti.C
tests/charm++/commtest/comlib/hello.C
tests/charm++/commtest/eachtomany-test-2/eachtomany.C
tests/charm++/commtest/eachtomany/eachtomany.C
tests/charm++/delegation/multicast/hello.C
tests/charm++/delegation/pipelined-section-reduction/hello.C
tests/charm++/load_balancing/lb_test/lb_test.C
tests/charm++/load_balancing/lb_test/predictor/test.C
tests/charm++/megatest/inherit.C
tests/charm++/megatest/migration.C
tests/charm++/sdag/migration/test1.C