fixed CProxySection_ArrayBase default constructor which may resulted in random _nsid...
authorGengbin Zheng <gzheng@illinois.edu>
Sun, 18 Oct 2009 17:48:49 +0000 (17:48 +0000)
committerGengbin Zheng <gzheng@illinois.edu>
Sun, 18 Oct 2009 17:48:49 +0000 (17:48 +0000)
Also write a better pup for sectionID.

src/ck-core/ck.C
src/ck-core/ckarray.h

index b61be8633b62dec92652272132c37850ab82d042..4b8495ec116724a9484ae78c2b252472bca0d570 100644 (file)
@@ -346,9 +346,13 @@ void CkSectionID::pup(PUP::er &p) {
     if (_nElems > 0) {
       if (p.isUnpacking()) _elems = new CkArrayIndexMax[_nElems];
       for (int i=0; i< _nElems; i++) p | _elems[i];
     if (_nElems > 0) {
       if (p.isUnpacking()) _elems = new CkArrayIndexMax[_nElems];
       for (int i=0; i< _nElems; i++) p | _elems[i];
+      npes = 0;
+      pelist = NULL;
     } else {
       // If _nElems is zero, than this section describes processors instead of array elements
     } else {
       // If _nElems is zero, than this section describes processors instead of array elements
+      _elems = NULL;
       p(npes);
       p(npes);
+      if (p.isUnpacking()) pelist = new int[npes];
       p(pelist, npes);
     }
 }
       p(pelist, npes);
     }
 }
index be12d4d42bace54f655bea3bd3ff96df1cf5b3ce..7d709639ca19f34c39e68c2d761f59cbd5f96657 100644 (file)
@@ -415,10 +415,10 @@ PUPmarshall(CProxyElement_ArrayBase);
 
 class CProxySection_ArrayBase:public CProxy_ArrayBase {
 private:
 
 class CProxySection_ArrayBase:public CProxy_ArrayBase {
 private:
-    int _nsid;
+       int _nsid;
        CkSectionID *_sid;
 public:
        CkSectionID *_sid;
 public:
-       CProxySection_ArrayBase() { }
+       CProxySection_ArrayBase(): _nsid(0), _sid(NULL) {}
        CProxySection_ArrayBase(const CkArrayID &aid,
                const CkArrayIndexMax *elems, const int nElems, CK_DELCTOR_PARAM)
                :CProxy_ArrayBase(aid,CK_DELCTOR_ARGS), _nsid(1) { _sid = new CkSectionID(aid, elems, nElems); }
        CProxySection_ArrayBase(const CkArrayID &aid,
                const CkArrayIndexMax *elems, const int nElems, CK_DELCTOR_PARAM)
                :CProxy_ArrayBase(aid,CK_DELCTOR_ARGS), _nsid(1) { _sid = new CkSectionID(aid, elems, nElems); }