Merge branch 'charm' into development
[charm.git] / src / ck-core / envelope.h
index 21e74c045e60450044620051f5236a4a483caf6a..5e0026f7bbdda856c705346160c8cad8137ae1dc 100644 (file)
@@ -268,6 +268,9 @@ private:
 
       return env;
     }
+    void reset() {
+      setEvent(++CkpvAccess(envelopeEventID));
+    }
     UShort getEpIdx(void) const { return epIdx; }
     void   setEpIdx(const UShort idx) { epIdx = idx; }
     UInt   getSrcPe(void) const { return pe; }
@@ -372,6 +375,10 @@ inline void *_allocMsg(const int msgtype, const int size, const int prio=0) {
   return EnvToUsr(envelope::alloc(msgtype,size,prio));
 }
 
+inline void _resetEnv(envelope *env) {
+  env->reset();
+}
+
 /** @} */
 
 extern UChar   _defaultQueueing;
@@ -388,8 +395,12 @@ private:
       env->setMsgIdx(0);
       return EnvToUsr(env);
     }
+    static void _reset(void* m) {
+      register envelope *env = UsrToEnv(m);
+      _resetEnv(env);
+    }
 public:
-    MsgPool():SafePool<void*>(_alloc, CkFreeMsg) {}
+    MsgPool():SafePool<void*>(_alloc, CkFreeMsg, _reset) {}
 #ifdef _FAULT_MLOG_
         void *get(void){
             return allocfn();