summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2007-07-25 10:36:13 +0000
committerRainer Gerhards <rgerhards@adiscon.com>2007-07-25 10:36:13 +0000
commita3192ac18ed9df7d95d0c8d5795994e867c85eca (patch)
tree4444071f9615b71645ea652ef0feaa12db7657e6
parent4c69b80ca0366db28bbbb46ddd03dfbc9d85b09c (diff)
downloadrsyslog-a3192ac18ed9df7d95d0c8d5795994e867c85eca.tar.gz
rsyslog-a3192ac18ed9df7d95d0c8d5795994e867c85eca.tar.xz
rsyslog-a3192ac18ed9df7d95d0c8d5795994e867c85eca.zip
changed calling interface for freeInstance() - need to work with dual
buffers in order to change output modules one by one
-rw-r--r--module-template.h16
-rw-r--r--modules.h2
-rw-r--r--syslogd.c2
3 files changed, 13 insertions, 7 deletions
diff --git a/module-template.h b/module-template.h
index 6ce1a08f..843440b5 100644
--- a/module-template.h
+++ b/module-template.h
@@ -45,8 +45,10 @@ static rsRetVal createInstance(instanceData **ppData)\
instanceData *pData; /* use this to point to data elements */
#define CODESTARTcreateInstance \
- if((pData = calloc(1, sizeof(instanceData))) == NULL)\
- return RS_RET_OUT_OF_MEMORY;
+ if((pData = calloc(1, sizeof(instanceData))) == NULL) {\
+ *ppData = NULL;\
+ return RS_RET_OUT_OF_MEMORY;\
+ }
#define ENDcreateInstance \
*ppData = pData;\
@@ -56,14 +58,18 @@ static rsRetVal createInstance(instanceData **ppData)\
/* freeInstance()
*/
#define BEGINfreeInstance \
-static rsRetVal freeInstance(selector_t *f)\
+static rsRetVal freeInstance(selector_t *f, void* pModData)\
{\
- rsRetVal iRet = RS_RET_OK;
+ rsRetVal iRet = RS_RET_OK;\
+ instanceData *pData;
#define CODESTARTfreeInstance \
- assert(f != NULL);
+ assert(f != NULL);\
+ pData = (instanceData*) pModData;
#define ENDfreeInstance \
+ if(pData != NULL)\
+ free(pData); /* we need to free this in any case */\
return iRet;\
}
diff --git a/modules.h b/modules.h
index 871fbc1b..46179d73 100644
--- a/modules.h
+++ b/modules.h
@@ -54,7 +54,7 @@ typedef struct moduleInfo {
/* be sure to support version handshake! */
rsRetVal (*modQueryEtryPt)(uchar *name, rsRetVal (**EtryPoint)()); /* query entry point addresses */
rsRetVal (*isCompatibleWithFeature)(syslogFeature);
- rsRetVal (*freeInstance)(struct filed*);/* called before termination or module unload */
+ rsRetVal (*freeInstance)(struct filed*, void*);/* called before termination or module unload */
rsRetVal (*modExit)(); /* called before termination or module unload */
/* below: parse a configuration line - return if processed
* or not. If not, must be parsed to next module.
diff --git a/syslogd.c b/syslogd.c
index 53d6bd43..d70d34cd 100644
--- a/syslogd.c
+++ b/syslogd.c
@@ -4121,7 +4121,7 @@ static void freeSelectors(void)
free(f->f_psziov);
/* free the action instances */
- f->pMod->freeInstance(f);
+ f->pMod->freeInstance(f, f->pModData);
# ifdef USE_PTHREADS
/* delete any mutex objects, if present */
if( ( (f->f_type == F_FORW_SUSP)