source: XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/server_context.hpp @ 2274

Last change on this file since 2274 was 2274, checked in by ymipsl, 2 years ago

Tracking memory leak : release memory statically alocated

YM

  • Property svn:executable set to *
File size: 2.1 KB
Line 
1#ifndef __SERVER_CONTEXT_HPP__
2#define __SERVER_CONTEXT_HPP__
3#include "xios_spl.hpp"
4#include "window_manager.hpp"
5#include "mpi.hpp"
6
7namespace xios
8{
9  class CContext ;
10  class CService ;
11
12  class CServerContext
13  {
14    const int NOTIFY_NOTHING=0 ;
15    const int NOTIFY_CREATE_INTERCOMM=1 ;
16   
17    public:
18    CServerContext(CService* parentService, MPI_Comm contextComm, const std::string& poolId, const std::string& serviceId, 
19                  const int& partitionId, const std::string& contextId) ;
20    ~CServerContext() ;
21    static void releaseStaticAllocation(void) { overlapedComm_.clear() ;}
22
23    bool createIntercomm(const string& poolId, const string& serviceId, const int& partitionId, const string& contextId, 
24                         const MPI_Comm& intraComm, MPI_Comm& interCommClient, MPI_Comm& interCommServer, bool wait=true) ;
25    void createIntercomm(int remoteLeader, const string& sourceContext) ;
26
27    void sendNotification(int rank); 
28    void checkNotifications(void) ;
29
30    bool eventLoop(bool serviceOnly=false) ;
31    void notificationsDumpOut(CBufferOut& buffer) ;
32    void notificationsDumpIn(CBufferIn& buffer) ;
33    void finalizeSignal(void) ;
34    void freeComm(void) ;
35    bool isAttachedMode(void) { return isAttachedMode_ ;}
36    CService* getParentService(void) {return parentService_ ; }
37
38    private:
39    void createIntercomm(void) ;
40   
41    static std::map<std::string, std::tuple<bool, MPI_Comm, MPI_Comm> > overlapedComm_ ;
42
43    MPI_Comm contextComm_ ;
44    MPI_Comm xiosComm_ ;
45
46    CContext* context_ ;
47    CService* parentService_ ;
48    std::string name_ ;
49
50    vector<MPI_Comm> clientsInterComm_ ;
51
52
53    const size_t maxBufferSize_=1024*1024 ;
54    CWindowManager* winNotify_ ;
55    int notifyInType_, notifyOutType_ ;
56    tuple<int, std::string> notifyInCreateIntercomm_, notifyOutCreateIntercomm_ ;
57
58    const int localLeader_=0 ;
59    int globalLeader_ ;
60    bool finalizeSignal_ ;
61    bool hasNotification_ ;
62    bool isAttachedMode_ ;
63
64    const double eventLoopLatency_=0; 
65    double lastEventLoop_=0. ;
66
67    friend class CWindowManager ;
68  } ;
69
70}
71
72#endif
Note: See TracBrowser for help on using the repository browser.