diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2014-05-29 13:22:59 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2014-05-29 17:04:56 +0300 |
commit | 2035536f831b0ce54c28c2a0b405febb113e0fab (patch) | |
tree | 2408086b3eae646006a39e0b78892e2838cb2f35 /src/binlog.c | |
parent | 35e2816614ab2a1aa585b1ae2547683a69ed9d22 (diff) | |
download | vmod-binlog-2035536f831b0ce54c28c2a0b405febb113e0fab.tar.gz vmod-binlog-2035536f831b0ce54c28c2a0b405febb113e0fab.tar.bz2 |
Further thread-safety fixes.
* NEWS: Version 1.0.90
* configure.ac: Likewise.
* src/binlog.c (binlog_env) <inst_head>: New member.
(binlog_env_init): Initialize inst_head and use it
instead of conf->inst_head.
(env_free): Free inst_head.
* src/pack.c (packdup): New function.
* src/pack.h (packdup): New proto.
Diffstat (limited to 'src/binlog.c')
-rw-r--r-- | src/binlog.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/binlog.c b/src/binlog.c index 4c3f40e..45299f2 100644 --- a/src/binlog.c +++ b/src/binlog.c @@ -1,5 +1,5 @@ /* This file is part of vmod-binlog - Copyright (C) 2013 Sergey Poznyakoff + Copyright (C) 2013, 2014 Sergey Poznyakoff Vmod-binlog is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -72,6 +72,7 @@ struct binlog_env { enum binlog_state state; /* binlog machine state */ struct binlog_config *conf; time_t timestamp; /* timestamp for the entry being built */ + struct packinst *inst_head; /* compiled format */ struct packinst *inst_cur; /* current instruction */ struct packenv *env; /* pack environment */ }; @@ -121,12 +122,14 @@ void binlog_env_init(struct binlog_env *ep, struct binlog_config *conf, time_t ts) { if (!ep->env) { - ep->env = packenv_create(packsize(conf->inst_head)); + ep->inst_head = packdup(conf->inst_head); + AN(ep->inst_head); + ep->env = packenv_create(packsize(ep->inst_head)); AN(ep->env); } packenv_init(ep->env); ep->state = state_start; - ep->inst_cur = packinit(conf->inst_head); + ep->inst_cur = packinit(ep->inst_head); ep->timestamp = ts; } @@ -247,6 +250,7 @@ static void env_free(void *f) { struct binlog_env *ep = f; + packfree(ep->inst_head); packenv_free(ep->env); free(ep); } |