Add explicit close call
authorPhil Miller <mille121@illinois.edu>
Tue, 9 Jul 2013 22:22:20 +0000 (17:22 -0500)
committerPhil Miller <mille121@illinois.edu>
Tue, 20 Aug 2013 23:28:39 +0000 (18:28 -0500)
src/libs/ck-libs/io/ckio.C
src/libs/ck-libs/io/ckio.ci
src/libs/ck-libs/io/ckio.h

index 380f408e1018d70fb054e65aab6a573b3311a36c..60469fba982ae588e28b42f5bd370c86f9fd6057 100644 (file)
@@ -116,6 +116,11 @@ namespace Ck { namespace IO {
             CProxy_WriteSession::ckNew(file, bytes, offset, complete, sessionOpts);
           ready.send(new SessionReadyMsg(file, bytes, offset, session));
         }
+
+        void close(FileToken token, CkCallback closed) {
+          managers.close(token, closed);
+          files.erase(token);
+        }
       };
 
       class Manager : public CBase_Manager {
@@ -163,6 +168,12 @@ namespace Ck { namespace IO {
           }
         }
 
+        void close(FileToken token, CkCallback closed) {
+          ::close(files[token].fd);
+          files.erase(token);
+          contribute(closed);
+        }
+
         int procNum(int arrayHdl,const CkArrayIndex &element)
         {
 #if 0
@@ -312,6 +323,10 @@ namespace Ck { namespace IO {
       impl::manager->write(session, data, bytes, offset);
     }
 
+    void close(FileToken token, CkCallback closed) {
+      impl::director.close(token, closed);
+    }
+
     class SessionCommitMsg : public CMessage_SessionCommitMsg {
 
     };
index 60a5a3e7e7ac9c0d06ebdc75d0d95adfca1a725f..af805339103e630c5af799cdadce311b2149436a 100644 (file)
@@ -23,6 +23,7 @@ module CkIO {
 
           entry void prepareWriteSession(FileToken file, size_t bytes, size_t offset,
                                          CkCallback ready, CkCallback complete);
+          entry void close(FileToken token, CkCallback closed);
         }
 
         group Manager // : CkArrayMap
@@ -30,6 +31,7 @@ module CkIO {
           entry Manager();
           entry void openFile(FileToken token, std::string name,
                               CkCallback opened, Options opts);
+          entry void close(FileToken token, CkCallback closed);
         };
 
         array [1D] WriteSession
index d28b3e66556d8e7f1593f482306f7c431df07384..56ae8f3633273420a61f06cb74e7b0f55589579f 100644 (file)
@@ -40,6 +40,7 @@ namespace Ck { namespace IO {
   void startSession(FileToken token, size_t bytes, size_t offset,
                     CkCallback ready, CkCallback complete);
   void write(SessionReadyMessage *session, const char *data, size_t bytes, size_t offset);
+  void close(FileToken token, CkCallback closed);
 
   struct FileReadyMsg : public CMessage_FileReadyMsg {
     FileToken token;