Triton Repository branch, master, updated. 65bc7888dd1389086dd9f5039cf0fb6db7808491
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Triton Repository". The branch, master has been updated via 65bc7888dd1389086dd9f5039cf0fb6db7808491 (commit) via e792c261a40511f8feb998da9f64714b29ccbf4f (commit) from 032c2cc05994d9714213387b46db76ffb2c92f58 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 65bc7888dd1389086dd9f5039cf0fb6db7808491 Author: slang <[email protected]> Date: Mon Aug 30 13:47:29 2010 -0500 fix leaks and do better cleanup of ctl structure commit e792c261a40511f8feb998da9f64714b29ccbf4f Author: slang <[email protected]> Date: Fri Aug 27 18:17:42 2010 -0500 fixes related to header macro parsing ----------------------------------------------------------------------- Summary of changes: code/Makefile.in | 2 +- code/src/aesop/ae-blocking-parser.h | 31 +++++++++++++++-- code/src/aesop/hints.c | 1 - code/src/aesop/parser/CGen.lhs | 21 ++++++++++- code/src/aesop/parser/Walker.lhs | 13 ++++--- code/src/aesop/parser/ae-blocking-parser.lhs | 48 +++++++++++-------------- code/src/aesop/parser/module.mk.in | 3 -- code/src/aesop/resource.h | 5 +++ code/src/net/mock/mock-method.ae | 2 + code/src/remote/service.ae | 4 ++- 10 files changed, 87 insertions(+), 43 deletions(-) Diff of changes: diff --git a/code/Makefile.in b/code/Makefile.in index 5e34a7a..21c8c46 100644 --- a/code/Makefile.in +++ b/code/Makefile.in @@ -646,7 +646,7 @@ $(runVALGRIND): valgrind%: % runvalgrind: $(runVALGRIND) -clean:: +clean: $(Q) " CLEAN" $(E)rm -f $(AEOBJS) $(AEOBJS_CPP) $(AEOBJS_INTERM) $(AEOBJS_DUMMY) \ $(LIBOBJS) $(AETEST) \ diff --git a/code/src/aesop/ae-blocking-parser.h b/code/src/aesop/ae-blocking-parser.h index 4fb05ea..02e230b 100644 --- a/code/src/aesop/ae-blocking-parser.h +++ b/code/src/aesop/ae-blocking-parser.h @@ -108,7 +108,7 @@ __ae_pwait_done = done_ctl->parent->gen.allposted == 1 && done_ctl->parent->gen.posted == done_ctl->parent->gen.completed; \ triton_mutex_unlock(&done_ctl->parent->gen.mutex); \ ae_hints_destroy(done_ctl->gen.hints); \ - free(done_ctl); \ + ae_ctl_destroy(done_ctl, &done_ctl->gen); \ } #define AE_MK_PBRANCH_CB_DONE_STMTS(__id) \ @@ -220,8 +220,9 @@ int prc; \ ae_lone_pbranches_remove(&ctl->gen); \ prc = ae_ctl_refdec(&ctl->parent->gen); \ - if(prc == 0) free(ctl->parent); \ - free(ctl); \ + if(prc == 0) ae_ctl_destroy(ctl->parent, &ctl->parent->gen); \ + ae_hints_destroy(ctl->gen.hints); \ + ae_ctl_destroy(ctl, &ctl->gen); \ } #define AE_MK_PARENT_POINTER_DECL(__parent) \ struct __parent##_ctl *parent; @@ -255,4 +256,28 @@ __ae_post_end: \ return __ae_postret; \ } \ +#define AE_MK_NULL_RETURN_CALLBACK() \ + ctl->callback(ctl->user_ptr); \ + if(ae_ctl_refdec(&ctl->gen) == 0) ae_ctl_destroy(ctl, &ctl->gen); \ + return; + +#define AE_MK_RETURN_CALLBACK(__ret_param_expr) \ + ctl->callback(ctl->user_ptr, __ret_param_expr); \ + if(ae_ctl_refdec(&ctl->gen) == 0) ae_ctl_destroy(ctl, &ctl->gen); \ + return; + +#define AE_MK_NULL_POST_RETURN_CALLBACK() \ +{ \ + ctl->callback(ctl->user_ptr); \ + if(ae_ctl_refdec(&ctl->gen) == 0) ae_ctl_destroy(ctl, &ctl->gen); \ + return TRITON_SUCCESS; \ +} + +#define AE_MK_POST_RETURN_CALLBACK(__ret_param_expr) \ +{ \ + ctl->callback(ctl->user_ptr, __ret_param_expr); \ + if(ae_ctl_refdec(&ctl->gen) == 0) ae_ctl_destroy(ctl, &ctl->gen); \ + return TRITON_SUCCESS; \ +} + #endif diff --git a/code/src/aesop/hints.c b/code/src/aesop/hints.c index 89493f7..db84799 100644 --- a/code/src/aesop/hints.c +++ b/code/src/aesop/hints.c @@ -258,7 +258,6 @@ void ae_hints_destroy(ae_hints_t h) { struct ae_hints *tmp, *next; - next = h; while(next) { diff --git a/code/src/aesop/parser/CGen.lhs b/code/src/aesop/parser/CGen.lhs index a913373..4371774 100644 --- a/code/src/aesop/parser/CGen.lhs +++ b/code/src/aesop/parser/CGen.lhs @@ -141,8 +141,25 @@ Functions to generate AST objects from C template code
mkParser :: [FilePath] -> [(String, String)] -> FilePath -> IO MacroParser mkParser idirs defines macheader = do types <- getTypeIdents idirs defines macheader -> result <- myCPP idirs defines Nothing ["-imacros", macheader, "-E", "-dM", "-P"] (Left "\n") -> return $ MacroParser result types +> result <- myCPP idirs defines Nothing ["-imacros", macheader, "-dM", "-P"] (Left "\n") +> (errorFP, errorH) <- tmpHandle +> (outFile, outH) <- tmpHandle +> pid <- runProcess "grep" ["-v", "__STDC", result] Nothing Nothing Nothing (Just outH) (Just errorH) +> ec <- waitForProcess pid +> case ec of +> ExitSuccess -> do +> hClose errorH +> removeFile errorFP +> return outFile +> ExitFailure e -> do +> isOpen <- hIsOpen errorH +> errorH <- if not isOpen then openFile errorFP ReadMode else return errorH +> errs <- hGetContents errorH +> removeFile errorFP +> trace ("Preprocessor failed with return code: " ++ (show e) ++ "\n" ++ errs ++ "\n\n") $ assert False $ return "dummy_file.c" +> hClose errorH +> return "dummy_file.c" +> return $ MacroParser outFile types
doCPPWithParser :: MacroParser -> NodeInfo -> String -> IO String doCPPWithParser p ni input = do diff --git a/code/src/aesop/parser/Walker.lhs b/code/src/aesop/parser/Walker.lhs index 69f6992..5175644 100644 --- a/code/src/aesop/parser/Walker.lhs +++ b/code/src/aesop/parser/Walker.lhs @@ -101,14 +101,14 @@ filename, prefix stack, blocking call registry, and blocking function pointer re prefixes :: [String], errorWriter :: (Walker -> String -> ReturnType -> String -> NodeInfo -> [CStat]), pbranchDone :: (Walker -> BlockingContext -> NodeInfo -> [CStat]), -> transExit :: (CStat -> CStat -> CStat), +> transExit :: (CStat -> CStat -> WalkerT CStat), fpTypeReg :: FPTypeRegistry, fpTypeLocalReg :: FPTypeRegistry, varReg :: VarRegistry, blockingParser :: Maybe MacroParser }
-> newWalkerState :: String -> [String] -> [(String, String)] -> (Walker -> String -> ReturnType -> String -> NodeInfo -> [CStat]) -> (Walker -> BlockingContext -> NodeInfo -> [CStat]) -> (CStat -> CStat -> CStat) -> FilePath -> IO Walker +> newWalkerState :: String -> [String] -> [(String, String)] -> (Walker -> String -> ReturnType -> String -> NodeInfo -> [CStat]) -> (Walker -> BlockingContext -> NodeInfo -> [CStat]) -> (CStat -> CStat -> WalkerT CStat) -> FilePath -> IO Walker
newWalkerState fname includes defines errorWriter pbranchDone transExit macroHeader = do varReg <- newVarRegistry bp <- mkParser includes defines macroHeader @@ -145,12 +145,12 @@ filename, prefix stack, blocking call registry, and blocking function pointer re w <- get return $ (pbranchDone w) w
-> setTransExit :: (CStat -> CStat -> CStat) -> WalkerT () +> setTransExit :: (CStat -> CStat -> WalkerT CStat) -> WalkerT ()
setTransExit tr = do w <- get put $ w { transExit = tr }
-> getTransExit :: WalkerT (CStat -> CStat -> CStat) +> getTransExit :: WalkerT (CStat -> CStat -> WalkerT CStat)
getTransExit = do w <- get return $ transExit w @@ -318,7 +318,10 @@ if so, register the outer struct too. matching = filter (\f -> (isFPStruct f && ((name f) == structName))) reg if not $ null matching then do -> assert ((length matching) == 1) return () +> -- when ((length matching) /= 1) $ do +> -- putStrLnW $ identToString structName +> -- mapM_ (putStrLnW . show) matching +> -- assert ((length matching) == 1) return () let mkFP (FPStruct s f fpt) = FPStruct typeName f fpt mapM_ (insertFP . mkFP) matching else return () diff --git a/code/src/aesop/parser/ae-blocking-parser.lhs b/code/src/aesop/parser/ae-blocking-parser.lhs index 68ed608..cb2e99b 100644 --- a/code/src/aesop/parser/ae-blocking-parser.lhs +++ b/code/src/aesop/parser/ae-blocking-parser.lhs @@ -788,38 +788,32 @@ to calling the appropriate callback p <- getPrefix endStmts <- mkStmtFromBlocking "AE_MK_END_OF_BLOCKING" [getParentName $ getFunContext b] (getNI b) transformExits <- getTransExit -> return $ map ((trLocals p b) . (transformExits (mkCompoundStmt Nothing endStmts (getNI b)))) stmts +> unprefixed <- mapM (transformExits (mkCompoundStmt Nothing endStmts (getNI b))) stmts +> return $ map (trLocals p b) unprefixed
transformFuncReturnStmts endStmt stmt = -> everywhere (mkT $ swapReturnWithCallback endStmt) stmt
-> swapReturnWithCallback :: CStat -> CStat -> CStat -> swapReturnWithCallback endStmt (CReturn retexpr ni) = compoundStmt -> where retparam = if isNothing retexpr then [] else [fromJust retexpr] -> compoundStmt = mkCompoundStmt Nothing (endStmt : -> [CExpr (Just (CCall (CMember (mkVar "ctl" ni) -> (newIdent "callback" ni) True ni) -> ([constructExprFromC ni "ctl->user_ptr"] ++ retparam) ni)) ni, -> mkStmtFromC ni "if(ae_ctl_refdec(&ctl->gen) == 0) free(ctl);", -> mkStmtFromC ni "return;"]) ni +> swapReturnWithCallback :: CStat -> CStat -> WalkerT CStat +> swapReturnWithCallback endStmt (CReturn retexpr ni) = do +> stmts <- if isNothing retexpr then mkStmtFromBlocking "AE_MK_NULL_RETURN_CALLBACK" [] ni +> else mkStmtFromBlocking "AE_MK_RETURN_CALLBACK" [show $ pretty $ fromJust retexpr] ni +> return $ mkCompoundStmt Nothing stmts ni -> swapReturnWithCallback e c = c +> swapReturnWithCallback e c = return c -> transformFuncReturnStmts :: CStat -> CStat -> CStat +> transformFuncReturnStmts :: CStat -> CStat -> WalkerT CStat - -> swapPostReturnWithCallback :: CStat -> CStat -> CStat -> swapPostReturnWithCallback endStmt (CReturn retexpr ni) = compoundStmt -> where retparam = if isNothing retexpr then [] else [fromJust retexpr] -> compoundStmt = mkCompoundStmt Nothing (endStmt : -> [(CExpr (Just (CCall (CMember (mkVar "ctl" ni) -> (newIdent "callback" ni) True ni) -> ([constructExprFromC ni "ctl->user_ptr"] ++ retparam) ni)) ni), -> mkStmtFromC ni "if(ae_ctl_refdec(&ctl->gen) == 0) free(ctl);", -> mkStmtFromC ni "return TRITON_SUCCESS;"]) ni -> swapPostReturnWithCallback e c = c - -> transformPostFuncReturnStmts :: CStat -> CStat -> CStat +> everywhereM (mkM $ swapReturnWithCallback endStmt) stmt + +> swapPostReturnWithCallback :: CStat -> CStat -> WalkerT CStat +> swapPostReturnWithCallback endStmt (CReturn retexpr ni) = do +> stmts <- if isNothing retexpr then mkStmtFromBlocking "AE_MK_NULL_POST_RETURN_CALLBACK" [] ni +> else mkStmtFromBlocking "AE_MK_POST_RETURN_CALLBACK" [show $ pretty $ fromJust retexpr] ni +> return $ mkCompoundStmt Nothing stmts ni + +> swapPostReturnWithCallback e c = return c + +> transformPostFuncReturnStmts :: CStat -> CStat -> WalkerT CStat
transformPostFuncReturnStmts endStmt stmt = -> everywhere (mkT $ swapPostReturnWithCallback endStmt) stmt +> everywhereM (mkM $ swapPostReturnWithCallback endStmt) stmt
getFuncLocalDecls :: CFunDef -> [CDecl] getFuncLocalDecls funDef = (getFunDefParams funDef) ++ (getFunLocalDeclarations funDef) diff --git a/code/src/aesop/parser/module.mk.in b/code/src/aesop/parser/module.mk.in index b4a232e..d3ffc2c 100644 --- a/code/src/aesop/parser/module.mk.in +++ b/code/src/aesop/parser/module.mk.in @@ -13,6 +13,3 @@ HSBINSRC += $(DIR)/ae-blocking-parser.lhs $(DIR)/ae-remote-parser.lhs
MODNAME_$(DIR)/ae-blocking-parser.lhs = BlockingParser MODNAME_$(DIR)/ae-remote-parser.lhs = RemoteParser - -clean:: - rm -rf *.o *.hi src/aesop/parser/ae-blocking-parser src/aesop/parser/ae-remote-parser diff --git a/code/src/aesop/resource.h b/code/src/aesop/resource.h index b88e4c0..7eb4a55 100644 --- a/code/src/aesop/resource.h +++ b/code/src/aesop/resource.h @@ -113,6 +113,11 @@ static inline void ae_ctl_init(struct ae_ctl *ctl, const char *name, ae_hints_t triton_uint128_setzero(ctl->current_op_id); } +static inline void ae_ctl_destroy(void *tctl, struct ae_ctl *ctl) +{ + free(tctl); +} + static inline int ae_ctl_refcount(struct ae_ctl *ctl) { int rc; diff --git a/code/src/net/mock/mock-method.ae b/code/src/net/mock/mock-method.ae index f607ba9..e6bec0a 100644 --- a/code/src/net/mock/mock-method.ae +++ b/code/src/net/mock/mock-method.ae @@ -533,6 +533,7 @@ static __blocking triton_ret_t triton_msg_mock_send( triton_mutex_unlock(&group->match_mutex); return TRITON_ERR_NOMEM; } + match_key_init(&send->key); send->key.from = self; send->key.to = to; @@ -545,6 +546,7 @@ static __blocking triton_ret_t triton_msg_mock_send( triton_list_link_clear(&send->hash_link); triton_list_link_clear(&send->queue_link); + if(triton_debug_enabled(mock_dbg_mask)) { triton_debug(mock_dbg_mask, diff --git a/code/src/remote/service.ae b/code/src/remote/service.ae index 9bf7c0d..0b35224 100644 --- a/code/src/remote/service.ae +++ b/code/src/remote/service.ae @@ -186,7 +186,7 @@ static __blocking triton_ret_t aer_message_service_request(triton_node_t from, a { /* TODO: report an error */ /* TODO: return failure to peer */ - return ret; + aer_message_destroy(&response); } ret = aer_message_send_exp(from, request->header.tag, &response); @@ -194,6 +194,8 @@ static __blocking triton_ret_t aer_message_service_request(triton_node_t from, a { /* TODO: report an error */ } + + aer_message_destroy(&response); return ret; } hooks/post-receive -- Triton Repository
participants (1)
-
noreply@mcs.anl.gov