@@ -62,6 +62,7 @@ static int _add_to_backlog(struct ulogd_pluginstance *upi,
static int _process_backlog(struct ulogd_pluginstance *upi);
static int _configure_ring(struct ulogd_pluginstance *upi);
+static int _start_ring(struct ulogd_pluginstance *upi);
static int _add_to_ring(struct ulogd_pluginstance *upi, struct db_instance *di);
static void *_process_ring(void *arg);
@@ -132,7 +133,6 @@ ulogd_db_start(struct ulogd_pluginstance *upi)
{
struct db_instance *di = (struct db_instance *) upi->private;
int ret;
- unsigned int i;
ulogd_log(ULOGD_NOTICE, "starting\n");
@@ -144,43 +144,13 @@ ulogd_db_start(struct ulogd_pluginstance *upi)
if (ret < 0)
goto db_error;
- if (di->ring.size > 0) {
- /* allocate */
- di->ring.ring = calloc(di->ring.size, sizeof(char) * di->ring.length);
- if (di->ring.ring == NULL)
- goto db_error;
- di->ring.wr_place = di->ring.ring;
- ulogd_log(ULOGD_NOTICE,
- "Allocating %d elements of size %d for ring\n",
- di->ring.size, di->ring.length);
- /* init start of query for each element */
- for(i = 0; i < di->ring.size; i++) {
- strcpy(di->ring.ring + di->ring.length * i + 1,
- di->stmt);
- }
- /* init cond & mutex */
- ret = pthread_cond_init(&di->ring.cond, NULL);
- if (ret != 0)
- goto alloc_error;
- ret = pthread_mutex_init(&di->ring.mutex, NULL);
- if (ret != 0)
- goto cond_error;
- /* create thread */
- ret = pthread_create(&di->db_thread_id, NULL, _process_ring, upi);
- if (ret != 0)
- goto mutex_error;
- }
+ ret = _start_ring(upi);
+ if (ret < 0)
+ goto db_error;
di->interp = &_interp_db_init;
-
return 0;
-mutex_error:
- pthread_mutex_destroy(&di->ring.mutex);
-cond_error:
- pthread_cond_destroy(&di->ring.cond);
-alloc_error:
- free(di->ring.ring);
db_error:
di->driver->close_db(upi);
return -1;
@@ -762,6 +732,55 @@ _configure_ring(struct ulogd_pluginstance *upi)
return 0;
}
+static int
+_start_ring(struct ulogd_pluginstance *upi)
+{
+ struct db_instance *di = (struct db_instance *) &upi->private;
+ unsigned int i;
+ int ret;
+
+ if (di->ring.size == 0)
+ return 0;
+
+ /* allocate */
+ di->ring.ring = calloc(di->ring.size, sizeof(char) * di->ring.length);
+ if (di->ring.ring == NULL)
+ return -1;
+ di->ring.wr_place = di->ring.ring;
+ ulogd_log(ULOGD_NOTICE,
+ "Allocating %d elements of size %d for ring\n",
+ di->ring.size, di->ring.length);
+
+ /* init start of query for each element */
+ for(i = 0; i < di->ring.size; i++)
+ strcpy(di->ring.ring + di->ring.length * i + 1,
+ di->stmt);
+
+ /* init cond & mutex */
+ ret = pthread_cond_init(&di->ring.cond, NULL);
+ if (ret != 0)
+ goto alloc_error;
+ ret = pthread_mutex_init(&di->ring.mutex, NULL);
+ if (ret != 0)
+ goto cond_error;
+
+ /* create thread */
+ ret = pthread_create(&di->db_thread_id, NULL, _process_ring, upi);
+ if (ret != 0)
+ goto mutex_error;
+
+ return 0;
+
+mutex_error:
+ pthread_mutex_destroy(&di->ring.mutex);
+cond_error:
+ pthread_cond_destroy(&di->ring.cond);
+alloc_error:
+ free(di->ring.ring);
+
+ return -1;
+}
+
static int
_add_to_ring(struct ulogd_pluginstance *upi, struct db_instance *di)
{
Move the code to initialize and start the thread that manages the ring-buffer into a separate function. No functional changes. Signed-off-by: Jeremy Sowden <jeremy@azazel.net> --- util/db.c | 87 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 34 deletions(-)