fsrvp: add memory context to fss_global
authorDavid Disseldorp <ddiss@samba.org>
Tue, 4 Sep 2012 13:14:41 +0000 (15:14 +0200)
committerDavid Disseldorp <ddiss@samba.org>
Wed, 19 Sep 2012 03:59:06 +0000 (05:59 +0200)
All shadow-copy sets are allocated using the fss_global context. Child
shadow-copy / share-map structures continue to be allocated using their
respective parents as a memory context.

source3/rpc_server/fss/srv_fss_agent.c
source3/rpc_server/fss/srv_fss_agent.h
source3/rpc_server/fss/srv_fss_private.h
source3/rpc_server/fssd.c

index 9dff78f59bc035c48725fcce14b1a139fb9a9953..00ff6774aea66c647c12cc6c8184bb73e6aac683 100644 (file)
@@ -188,24 +188,25 @@ static struct fss_sc_smap *sc_smap_lookup(struct fss_sc_smap *smaps_head,
 
 void srv_fssa_cleanup(void)
 {
-       struct fss_sc_set *sc_set;
-       struct fss_sc_set *sc_set_n;
-
-       for (sc_set = fss_global.sc_sets; sc_set; sc_set = sc_set_n) {
-               sc_set_n = sc_set->next;
-               talloc_free(sc_set);
-       }
+       talloc_free(fss_global.mem_ctx);
        ZERO_STRUCT(fss_global);
 }
 
-void srv_fssa_start(void)
+NTSTATUS srv_fssa_start(void)
 {
+       fss_global.mem_ctx = talloc_named_const(NULL, 0,
+                                               "parent fss rpc server ctx");
+       if (fss_global.mem_ctx == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
+
        fss_global.min_vers = FSRVP_RPC_VERSION_1;
        fss_global.max_vers = FSRVP_RPC_VERSION_1;
        /*
         * TODO The server MUST populate the GlobalShadowCopySetTable with the
         * ShadowCopySet entries read from the configuration store.
         */
+       return NT_STATUS_OK;
 }
 
 /*
@@ -319,7 +320,7 @@ uint32_t _fss_StartShadowCopySet(struct pipes_struct *p,
 
        /* stop msg seq timer */
 
-       sc_set = talloc_zero(NULL, struct fss_sc_set);
+       sc_set = talloc_zero(fss_global.mem_ctx, struct fss_sc_set);
        if (sc_set == NULL) {
                return E_OUTOFMEMORY;
        }
index d7a9b2b9553116079ac589e3e09c24cf6be0e49d..532e6b6e732856495233e4b8c006d774f659b406 100644 (file)
@@ -22,7 +22,7 @@
 #ifndef _SRV_FSS_AGENT_H_
 #define _SRV_FSS_AGENT_H_
 
-void srv_fssa_start(void);
+NTSTATUS srv_fssa_start(void);
 void srv_fssa_cleanup(void);
 
 #endif /*_SRV_FSS_AGENT_H_ */
index d8985f0fff34498b83eb1683b31d5ca2574bdb91..f77a8e3c7eed9b936cdae930e2f99b0bc6fbb09e 100644 (file)
@@ -67,6 +67,7 @@ struct fss_sc_set {
 };
 
 struct fss_global {
+       TALLOC_CTX *mem_ctx;            /* parent mem ctx for sc sets */
        uint32_t min_vers;
        uint32_t max_vers;
        uint32_t cur_ctx;
index 5f044ba2409fab7af1f4c48edddf47a9c2a88fce..3b4f71c1c96b4732efe4b3904936a82efb808e6b 100644 (file)
@@ -136,8 +136,9 @@ static bool fss_shutdown_cb(void *ptr)
 
 static bool fss_init_cb(void *ptr)
 {
-       srv_fssa_start();
-       return true;
+       NTSTATUS status;
+       status = srv_fssa_start();
+       return NT_STATUS_IS_OK(status);
 }
 
 void start_fssd(struct tevent_context *ev_ctx,