doc: Add serial to list of ci file reserved words
[charm.git] / src / conv-core / futures.c
index 3f376e82ed893d9abd6ec76bd8499459af4344cd..f81aa3c6f16c63d8f34d82e244495b675c40d2bb 100644 (file)
@@ -1,3 +1,5 @@
+#include <stdlib.h>
+#include <string.h>
 #include "converse.h"
 
 typedef struct Cfuture_data_s
@@ -17,7 +19,7 @@ typedef struct CfutureValue_s
 }
 *CfutureValue;
 
-#define field_offset(t, f) ((int)(((t)0)->f))
+#define field_offset(t, f) ((size_t)(((t)0)->f))
 #define void_to_value(v) ((CfutureValue)(((char*)v)-field_offset(CfutureValue,rest)))
 
 CpvDeclare(int, CfutureStoreIndex);
@@ -26,6 +28,7 @@ Cfuture CfutureCreate()
 {
   futdata data = (futdata)malloc(sizeof(struct Cfuture_data_s));
   Cfuture result;
+  _MEMCHECK(data);
   data->value = 0;
   data->ready = 0;
   data->waiters = 0;
@@ -46,7 +49,6 @@ static void CfutureAwaken(futdata data, CfutureValue val)
 
 static void CfutureStore(CfutureValue m)
 {
-  CmiGrabBuffer(&m);
   CfutureAwaken(m->data, m);
 }
 
@@ -61,14 +63,12 @@ void *CfutureCreateBuffer(int bytes)
 
 void CfutureDestroyBuffer(void *v)
 {
-  CfutureValue value = void_to_value(v);
   CmiFree(v);
 }
 
 void CfutureStoreBuffer(Cfuture f, void *value)
 {
   CfutureValue m = void_to_value(value);
-  futdata data;
   if (f.pe == CmiMyPe()) {
     CfutureAwaken(f.data, m);
   } else {
@@ -112,12 +112,12 @@ void CfutureDestroy(Cfuture f)
     CmiPrintf("error: CfutureDestroy: destroying an active future.\n");
     exit(1);
   }
-  if (f.data->value) free(f.data->value);
-  free(f);
+  if (f.data->value) CmiFree(f.data->value);
+  free(f.data);
 }
 
-void CfutureInit()
+void CfutureModuleInit()
 {
   CpvInitialize(int, CfutureStoreIndex);
-  CpvAccess(CfutureStoreIndex) = CmiRegisterHandler(CfutureStore);
+  CpvAccess(CfutureStoreIndex) = CmiRegisterHandler((CmiHandler)CfutureStore);
 }