aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/extractor.c1
-rw-r--r--src/main/extractor_ipc.h12
-rw-r--r--src/main/extractor_ipc_gnu.c24
-rw-r--r--src/main/extractor_plugins.c8
4 files changed, 40 insertions, 5 deletions
diff --git a/src/main/extractor.c b/src/main/extractor.c
index 126a539..bbe661c 100644
--- a/src/main/extractor.c
+++ b/src/main/extractor.c
@@ -387,6 +387,7 @@ EXTRACTOR_extract (struct EXTRACTOR_PluginList *plugins,
387 (EXTRACTOR_OPTION_IN_PROCESS == pos->flags) ) 387 (EXTRACTOR_OPTION_IN_PROCESS == pos->flags) )
388 { 388 {
389 pos->shm = shm; 389 pos->shm = shm;
390 (void) EXTRACTOR_IPC_shared_memory_change_rc_ (shm, 1);
390 pos->channel = EXTRACTOR_IPC_channel_create_ (pos, 391 pos->channel = EXTRACTOR_IPC_channel_create_ (pos,
391 shm); 392 shm);
392 } 393 }
diff --git a/src/main/extractor_ipc.h b/src/main/extractor_ipc.h
index e1d2f37..d975b30 100644
--- a/src/main/extractor_ipc.h
+++ b/src/main/extractor_ipc.h
@@ -337,6 +337,18 @@ EXTRACTOR_IPC_shared_memory_destroy_ (struct EXTRACTOR_SharedMemory *shm);
337 337
338 338
339/** 339/**
340 * Change the reference counter for this shm instance.
341 *
342 * @param shm instance to update
343 * @param delta value to change RC by
344 * @return new RC
345 */
346unsigned int
347EXTRACTOR_IPC_shared_memory_change_rc_ (struct EXTRACTOR_SharedMemory *shm,
348 int delta);
349
350
351/**
340 * Initialize shared memory area from data source. 352 * Initialize shared memory area from data source.
341 * 353 *
342 * @param shm memory area to initialize 354 * @param shm memory area to initialize
diff --git a/src/main/extractor_ipc_gnu.c b/src/main/extractor_ipc_gnu.c
index b56cc40..68b6162 100644
--- a/src/main/extractor_ipc_gnu.c
+++ b/src/main/extractor_ipc_gnu.c
@@ -66,6 +66,11 @@ struct EXTRACTOR_SharedMemory
66 */ 66 */
67 char shm_name[MAX_SHM_NAME + 1]; 67 char shm_name[MAX_SHM_NAME + 1];
68 68
69 /**
70 * Reference counter describing how many references share this SHM.
71 */
72 unsigned int rc;
73
69}; 74};
70 75
71 76
@@ -163,11 +168,28 @@ EXTRACTOR_IPC_shared_memory_create_ (size_t size)
163 return NULL; 168 return NULL;
164 } 169 }
165 shm->shm_size = size; 170 shm->shm_size = size;
171 shm->rc = 0;
166 return shm; 172 return shm;
167} 173}
168 174
169 175
170/** 176/**
177 * Change the reference counter for this shm instance.
178 *
179 * @param shm instance to update
180 * @param delta value to change RC by
181 * @return new RC
182 */
183unsigned int
184EXTRACTOR_IPC_shared_memory_change_rc_ (struct EXTRACTOR_SharedMemory *shm,
185 int delta)
186{
187 shm->rc += delta;
188 return shm->rc;
189}
190
191
192/**
171 * Destroy shared memory area. 193 * Destroy shared memory area.
172 * 194 *
173 * @param shm memory area to destroy 195 * @param shm memory area to destroy
@@ -175,7 +197,7 @@ EXTRACTOR_IPC_shared_memory_create_ (size_t size)
175 */ 197 */
176void 198void
177EXTRACTOR_IPC_shared_memory_destroy_ (struct EXTRACTOR_SharedMemory *shm) 199EXTRACTOR_IPC_shared_memory_destroy_ (struct EXTRACTOR_SharedMemory *shm)
178{ 200{
179 munmap (shm->shm_ptr, shm->shm_size); 201 munmap (shm->shm_ptr, shm->shm_size);
180 (void) close (shm->shm_id); 202 (void) close (shm->shm_id);
181 (void) shm_unlink (shm->shm_name); 203 (void) shm_unlink (shm->shm_name);
diff --git a/src/main/extractor_plugins.c b/src/main/extractor_plugins.c
index 8ebd32c..9519298 100644
--- a/src/main/extractor_plugins.c
+++ b/src/main/extractor_plugins.c
@@ -351,8 +351,8 @@ EXTRACTOR_plugin_add_config (struct EXTRACTOR_PluginList *prev,
351 * @return the reduced list, unchanged if the plugin was not loaded 351 * @return the reduced list, unchanged if the plugin was not loaded
352 */ 352 */
353struct EXTRACTOR_PluginList * 353struct EXTRACTOR_PluginList *
354EXTRACTOR_plugin_remove (struct EXTRACTOR_PluginList * prev, 354EXTRACTOR_plugin_remove (struct EXTRACTOR_PluginList *prev,
355 const char * library) 355 const char *library)
356{ 356{
357 struct EXTRACTOR_PluginList *pos; 357 struct EXTRACTOR_PluginList *pos;
358 struct EXTRACTOR_PluginList *first; 358 struct EXTRACTOR_PluginList *first;
@@ -381,8 +381,8 @@ EXTRACTOR_plugin_remove (struct EXTRACTOR_PluginList * prev,
381 prev->next = pos->next; 381 prev->next = pos->next;
382 if (NULL != pos->channel) 382 if (NULL != pos->channel)
383 EXTRACTOR_IPC_channel_destroy_ (pos->channel); 383 EXTRACTOR_IPC_channel_destroy_ (pos->channel);
384 // FIXME: need to also destroy pos->shm if this is 384 if (0 == EXTRACTOR_IPC_shared_memory_change_rc_ (pos->shm, -1))
385 // the last user; need to add some RC to the SHM! 385 EXTRACTOR_IPC_shared_memory_destroy_ (pos->shm);
386 free (pos->short_libname); 386 free (pos->short_libname);
387 free (pos->libname); 387 free (pos->libname);
388 free (pos->plugin_options); 388 free (pos->plugin_options);