* [tarantool-patches] [PATCH v1] Fix LTO in travis-ci
@ 2019-05-16 6:26 Alexander V. Tikhonov
2019-05-16 16:22 ` [tarantool-patches] " Alexander Turenko
0 siblings, 1 reply; 2+ messages in thread
From: Alexander V. Tikhonov @ 2019-05-16 6:26 UTC (permalink / raw)
To: Alexander Turenko; +Cc: Alexander V. Tikhonov, tarantool-patches
Made fixes:
- Added CMAKE_EXTRA_PARAMS environment to docker's container
runs to enable -DENABLE_LTO=ON/OFF cmake option.
- Added CC/CXX environment to docker's container runs to set
clang for cmake.
- Changed LTO docker's image to 'debian-buster' due to LTO needed
higher versions of packages, check for more information commit:
commit f9e28ce4602aff3f9bb4e743b0d6167b0f8df88d
Author: AKhatskevich <avkhatskevich@tarantool.org>
Date: Thu Mar 22 11:37:06 2018 +0300
- Fixed sources to avoid of failures on builds with LTO:
1) src/box/memtx_rtree.c: In function ‘mp_decode_rect’:
src/box/memtx_rtree.c:86:24: error: ‘c’ may be used uninitialized
in this function [-Werror=maybe-uninitialized]
rect->coords[i * 2] = c;
^
src/box/memtx_rtree.c:74:10: note: ‘c’ was declared here
coord_t c;
^
2) src/box/sql/func.c: In function ‘quoteFunc’:
src/box/sql/func.c:1103:3: error: ‘b’ may be used uninitialized
in this function [-Werror=maybe-uninitialized]
sql_result_text(context, sql_value_boolean(argv[0]) ?
^
src/box/sql/vdbeapi.c:217:7: note: ‘b’ was declared here
bool b;
^
3) src/box/tuple_update.c: In function ‘update_read_ops’:
src/box/tuple_update.c:1022:4: error: ‘field_no’ may be used
uninitialized in this function [-Werror=maybe-uninitialized]
diag_set(ClientError, ER_NO_SUCH_FIELD_NO, field_no);
^
src/box/tuple_update.c:1014:11: note: ‘field_no’ was declared here
int32_t field_no;
^
4) src/httpc.c: In function ‘httpc_set_verbose’:
src/httpc.c:267:2: error: call to ‘_curl_easy_setopt_err_long’
declared with attribute warning: curl_easy_setopt expects a long
argument for this option [-Werror]
curl_easy_setopt(req->curl_request.easy, CURLOPT_VERBOSE, curl_verbose);
^
5) src/lua/httpc.c: In function ‘luaT_httpc_request’:
src/lua/httpc.c:128:64: error: ‘MEM[(int *)&parser + 20B]’ may be used
uninitialized in this function [-Werror=maybe-uninitialized]
lua_pushinteger(L, (parser.http_minor > 0) ? parser.http_minor: 0);
^
src/lua/httpc.c:67:21: note: ‘MEM[(int *)&parser + 20B]’ was declared here
struct http_parser parser;
^
src/lua/httpc.c:124:64: error: ‘MEM[(int *)&parser + 16B]’ may be used
uninitialized in this function [-Werror=maybe-uninitialized]
lua_pushinteger(L, (parser.http_major > 0) ? parser.http_major: 0);
^
src/lua/httpc.c:67:21: note: ‘MEM[(int *)&parser + 16B]’ was declared here
struct http_parser parser;
^
Close #4215
---
Github: https://github.com/tarantool/tarantool/compare/avtikhon/lto-build-fix
Issue: https://github.com/tarantool/tarantool/issues/4215
.travis.mk | 7 +++++--
.travis.yml | 4 ++--
src/box/memtx_rtree.c | 2 +-
src/box/sql/vdbeapi.c | 2 +-
src/box/tuple_update.c | 2 +-
src/httpc.c | 2 +-
src/lua/httpc.c | 34 ++++++++++++++++++----------------
7 files changed, 29 insertions(+), 24 deletions(-)
diff --git a/.travis.mk b/.travis.mk
index 4ac3fc11a..55bee9980 100644
--- a/.travis.mk
+++ b/.travis.mk
@@ -2,7 +2,7 @@
# Travis CI rules
#
-DOCKER_IMAGE:=packpack/packpack:debian-stretch
+DOCKER_IMAGE?=packpack/packpack:debian-stretch
all: package
@@ -27,6 +27,9 @@ docker_%:
-e CCACHE_DIR=/cache/ccache \
-e COVERALLS_TOKEN=${COVERALLS_TOKEN} \
-e TRAVIS_JOB_ID=${TRAVIS_JOB_ID} \
+ -e CMAKE_EXTRA_PARAMS=${CMAKE_EXTRA_PARAMS} \
+ -e CC=${CC} \
+ -e CXX=${CXX} \
${DOCKER_IMAGE} \
make -f .travis.mk $(subst docker_,,$@)
@@ -37,7 +40,7 @@ deps_ubuntu:
libcurl4-openssl-dev libunwind-dev libicu-dev \
python python-pip python-setuptools python-dev \
python-msgpack python-yaml python-argparse python-six python-gevent \
- lcov ruby
+ lcov ruby clang llvm llvm-dev
test_ubuntu: deps_ubuntu
cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_WERROR=ON ${CMAKE_EXTRA_PARAMS}
diff --git a/.travis.yml b/.travis.yml
index 6e79cf2fe..92fb54686 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -37,10 +37,10 @@ jobs:
if: branch = "master"
# Special targets (only LTO for now).
- name: "LTO build + test (Linux, gcc)"
- env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON
+ env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON DOCKER_IMAGE=packpack/packpack:debian-buster
if: branch = "master"
- name: "LTO build + test (Linux, clang)"
- env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON
+ env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON DOCKER_IMAGE=packpack/packpack:debian-buster
if: branch = "master"
compiler: clang
- name: "LTO build + test (OS X Mojave 10.14)"
diff --git a/src/box/memtx_rtree.c b/src/box/memtx_rtree.c
index 45e8fb8e3..b91a405d7 100644
--- a/src/box/memtx_rtree.c
+++ b/src/box/memtx_rtree.c
@@ -71,7 +71,7 @@ static inline int
mp_decode_rect(struct rtree_rect *rect, unsigned dimension,
const char *mp, unsigned count, const char *what)
{
- coord_t c;
+ coord_t c = 0;
if (count == dimension) { /* point */
for (unsigned i = 0; i < dimension; i++) {
if (mp_decode_num(&mp, i, &c) < 0)
diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c
index d2868567b..04083914a 100644
--- a/src/box/sql/vdbeapi.c
+++ b/src/box/sql/vdbeapi.c
@@ -214,7 +214,7 @@ sql_value_double(sql_value * pVal)
bool
sql_value_boolean(sql_value *val)
{
- bool b;
+ bool b = false;
mem_value_bool((struct Mem *) val, &b);
return b;
}
diff --git a/src/box/tuple_update.c b/src/box/tuple_update.c
index 849073258..7a203ced8 100644
--- a/src/box/tuple_update.c
+++ b/src/box/tuple_update.c
@@ -1011,7 +1011,7 @@ update_read_ops(struct tuple_update *update, const char *expr,
"field id must be a number");
return -1;
}
- int32_t field_no;
+ int32_t field_no = 0;
if (mp_read_i32(update->index_base, op, &expr, &field_no))
return -1;
if (field_no - update->index_base >= 0) {
diff --git a/src/httpc.c b/src/httpc.c
index 80dabd59c..813a3e387 100644
--- a/src/httpc.c
+++ b/src/httpc.c
@@ -267,7 +267,7 @@ httpc_set_low_speed_limit(struct httpc_request *req, long low_speed_limit)
void
httpc_set_verbose(struct httpc_request *req, bool curl_verbose)
{
- curl_easy_setopt(req->curl_request.easy, CURLOPT_VERBOSE, curl_verbose);
+ curl_easy_setopt(req->curl_request.easy, CURLOPT_VERBOSE, (long) curl_verbose);
}
void
diff --git a/src/lua/httpc.c b/src/lua/httpc.c
index c39a2f0de..c174ffce0 100644
--- a/src/lua/httpc.c
+++ b/src/lua/httpc.c
@@ -64,9 +64,10 @@ static int
parse_headers(lua_State *L, char *buffer, size_t len,
int max_header_name_len)
{
- struct http_parser parser;
- parser.hdr_name = (char *) calloc(max_header_name_len, sizeof(char));
- if (parser.hdr_name == NULL) {
+ struct http_parser *parser = (struct http_parser *)
+ malloc(sizeof(*parser));
+ parser->hdr_name = (char *) calloc(max_header_name_len, sizeof(char));
+ if (parser->hdr_name == NULL) {
diag_set(OutOfMemory, max_header_name_len * sizeof(char),
"malloc", "hdr_name");
return -1;
@@ -75,7 +76,7 @@ parse_headers(lua_State *L, char *buffer, size_t len,
lua_pushstring(L, "headers");
lua_newtable(L);
while (true) {
- int rc = http_parse_header_line(&parser, &buffer, end_buf,
+ int rc = http_parse_header_line(parser, &buffer, end_buf,
max_header_name_len);
if (rc == HTTP_PARSE_INVALID || rc == HTTP_PARSE_CONTINUE) {
continue;
@@ -84,35 +85,35 @@ parse_headers(lua_State *L, char *buffer, size_t len,
break;
}
if (rc == HTTP_PARSE_OK) {
- lua_pushlstring(L, parser.hdr_name,
- parser.hdr_name_idx);
+ lua_pushlstring(L, parser->hdr_name,
+ parser->hdr_name_idx);
/* check value of header, if exists */
- lua_pushlstring(L, parser.hdr_name,
- parser.hdr_name_idx);
+ lua_pushlstring(L, parser->hdr_name,
+ parser->hdr_name_idx);
lua_gettable(L, -3);
- int value_len = parser.hdr_value_end -
- parser.hdr_value_start;
+ int value_len = parser->hdr_value_end -
+ parser->hdr_value_start;
/* table of values to handle duplicates*/
if (lua_isnil(L, -1)) {
lua_pop(L, 1);
lua_newtable(L);
lua_pushinteger(L, 1);
- lua_pushlstring(L, parser.hdr_value_start,
+ lua_pushlstring(L, parser->hdr_value_start,
value_len);
lua_settable(L, -3);
} else if (lua_istable(L, -1)) {
lua_pushinteger(L, lua_objlen(L, -1) + 1);
- lua_pushlstring(L, parser.hdr_value_start,
+ lua_pushlstring(L, parser->hdr_value_start,
value_len);
lua_settable(L, -3);
}
- /*headers[parser.header] = {value}*/
+ /*headers[parser->header] = {value}*/
lua_settable(L, -3);
}
}
- free(parser.hdr_name);
+ free(parser->hdr_name);
/* headers */
lua_settable(L, -3);
@@ -121,15 +122,16 @@ parse_headers(lua_State *L, char *buffer, size_t len,
lua_newtable(L);
lua_pushinteger(L, 1);
- lua_pushinteger(L, (parser.http_major > 0) ? parser.http_major: 0);
+ lua_pushinteger(L, (parser->http_major > 0) ? parser->http_major: 0);
lua_settable(L, -3);
lua_pushinteger(L, 2);
- lua_pushinteger(L, (parser.http_minor > 0) ? parser.http_minor: 0);
+ lua_pushinteger(L, (parser->http_minor > 0) ? parser->http_minor: 0);
lua_settable(L, -3);
/* proto */
lua_settable(L, -3);
+ free(parser);
return 0;
}
/* }}}
--
2.17.1
^ permalink raw reply [flat|nested] 2+ messages in thread
* [tarantool-patches] Re: [PATCH v1] Fix LTO in travis-ci
2019-05-16 6:26 [tarantool-patches] [PATCH v1] Fix LTO in travis-ci Alexander V. Tikhonov
@ 2019-05-16 16:22 ` Alexander Turenko
0 siblings, 0 replies; 2+ messages in thread
From: Alexander Turenko @ 2019-05-16 16:22 UTC (permalink / raw)
To: Alexander V. Tikhonov; +Cc: tarantool-patches
> Fix LTO in travis-ci
Need to mention that clang is fixed too.
BTW, I usually use prefix 'travis-ci:' for such commits.
>
> Made fixes:
>
> - Added CMAKE_EXTRA_PARAMS environment to docker's container
> runs to enable -DENABLE_LTO=ON/OFF cmake option.
>
> - Added CC/CXX environment to docker's container runs to set
> clang for cmake.
>
> - Changed LTO docker's image to 'debian-buster' due to LTO needed
> higher versions of packages, check for more information commit:
>
> commit f9e28ce4602aff3f9bb4e743b0d6167b0f8df88d
> Author: AKhatskevich <avkhatskevich@tarantool.org>
> Date: Thu Mar 22 11:37:06 2018 +0300
We usually reference other commits like
0000000000000000000000000000000000000000 ('title of the commit here').
>
> - Fixed sources to avoid of failures on builds with LTO:
Is it about clang or gcc? Which version? I need to know to reproduce.
>
> 1) src/box/memtx_rtree.c: In function ‘mp_decode_rect’:
> src/box/memtx_rtree.c:86:24: error: ‘c’ may be used uninitialized
> in this function [-Werror=maybe-uninitialized]
> rect->coords[i * 2] = c;
> ^
> src/box/memtx_rtree.c:74:10: note: ‘c’ was declared here
> coord_t c;
> ^
>
> 2) src/box/sql/func.c: In function ‘quoteFunc’:
> src/box/sql/func.c:1103:3: error: ‘b’ may be used uninitialized
> in this function [-Werror=maybe-uninitialized]
> sql_result_text(context, sql_value_boolean(argv[0]) ?
> ^
> src/box/sql/vdbeapi.c:217:7: note: ‘b’ was declared here
> bool b;
> ^
>
> 3) src/box/tuple_update.c: In function ‘update_read_ops’:
> src/box/tuple_update.c:1022:4: error: ‘field_no’ may be used
> uninitialized in this function [-Werror=maybe-uninitialized]
> diag_set(ClientError, ER_NO_SUCH_FIELD_NO, field_no);
> ^
> src/box/tuple_update.c:1014:11: note: ‘field_no’ was declared here
> int32_t field_no;
> ^
>
> 4) src/httpc.c: In function ‘httpc_set_verbose’:
> src/httpc.c:267:2: error: call to ‘_curl_easy_setopt_err_long’
> declared with attribute warning: curl_easy_setopt expects a long
> argument for this option [-Werror]
> curl_easy_setopt(req->curl_request.easy, CURLOPT_VERBOSE, curl_verbose);
> ^
>
> 5) src/lua/httpc.c: In function ‘luaT_httpc_request’:
> src/lua/httpc.c:128:64: error: ‘MEM[(int *)&parser + 20B]’ may be used
> uninitialized in this function [-Werror=maybe-uninitialized]
> lua_pushinteger(L, (parser.http_minor > 0) ? parser.http_minor: 0);
> ^
> src/lua/httpc.c:67:21: note: ‘MEM[(int *)&parser + 20B]’ was declared here
> struct http_parser parser;
> ^
> src/lua/httpc.c:124:64: error: ‘MEM[(int *)&parser + 16B]’ may be used
> uninitialized in this function [-Werror=maybe-uninitialized]
> lua_pushinteger(L, (parser.http_major > 0) ? parser.http_major: 0);
> ^
> src/lua/httpc.c:67:21: note: ‘MEM[(int *)&parser + 16B]’ was declared here
> struct http_parser parser;
> ^
>
> Close #4215
> ---
>
> Github: https://github.com/tarantool/tarantool/compare/avtikhon/lto-build-fix
> Issue: https://github.com/tarantool/tarantool/issues/4215
>
> .travis.mk | 7 +++++--
> .travis.yml | 4 ++--
> src/box/memtx_rtree.c | 2 +-
> src/box/sql/vdbeapi.c | 2 +-
> src/box/tuple_update.c | 2 +-
> src/httpc.c | 2 +-
> src/lua/httpc.c | 34 ++++++++++++++++++----------------
> 7 files changed, 29 insertions(+), 24 deletions(-)
>
> diff --git a/.travis.mk b/.travis.mk
> index 4ac3fc11a..55bee9980 100644
> --- a/.travis.mk
> +++ b/.travis.mk
> @@ -2,7 +2,7 @@
> # Travis CI rules
> #
>
> -DOCKER_IMAGE:=packpack/packpack:debian-stretch
> +DOCKER_IMAGE?=packpack/packpack:debian-stretch
>
> all: package
>
> @@ -27,6 +27,9 @@ docker_%:
> -e CCACHE_DIR=/cache/ccache \
> -e COVERALLS_TOKEN=${COVERALLS_TOKEN} \
> -e TRAVIS_JOB_ID=${TRAVIS_JOB_ID} \
> + -e CMAKE_EXTRA_PARAMS=${CMAKE_EXTRA_PARAMS} \
> + -e CC=${CC} \
> + -e CXX=${CXX} \
It is a kind of nitpicking, but formally Travis-CI sets also
{CC,CXX}_FOR_BUILD. I would add the link [1] to the commit message and clarify
that we don't needed {CC,CXX}_FOR_BUILD, because don't doing cross-compilation
at the moment. This could help if we'll add it somewhere in the future.
[1]: https://docs.travis-ci.com/user/languages/cpp/#choosing-compilers-to-test-against
> ${DOCKER_IMAGE} \
> make -f .travis.mk $(subst docker_,,$@)
>
> @@ -37,7 +40,7 @@ deps_ubuntu:
> libcurl4-openssl-dev libunwind-dev libicu-dev \
> python python-pip python-setuptools python-dev \
> python-msgpack python-yaml python-argparse python-six python-gevent \
> - lcov ruby
> + lcov ruby clang llvm llvm-dev
Whether our separate deps_clang_8 rule (that is planned to enable on gitlab ci)
will work good after clang/llvm/llvm-dev installing here?
I would think whether we can add separate deps_clang rule in the similar way
and call it from .travis.yml (or from ubuntu_clang target in .travis.mk?).
If there is a good way to split it out, then do. If not, I don't insist on
that.
>
> test_ubuntu: deps_ubuntu
> cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_WERROR=ON ${CMAKE_EXTRA_PARAMS}
> diff --git a/.travis.yml b/.travis.yml
> index 6e79cf2fe..92fb54686 100644
> --- a/.travis.yml
> +++ b/.travis.yml
> @@ -37,10 +37,10 @@ jobs:
> if: branch = "master"
> # Special targets (only LTO for now).
> - name: "LTO build + test (Linux, gcc)"
> - env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON
> + env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON DOCKER_IMAGE=packpack/packpack:debian-buster
I would break the line:
| # Special targets (only LTO for now).
| - name: "LTO build + test (Linux, gcc)"
| env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON
| DOCKER_IMAGE=packpack/packpack:debian-buster
| if: branch = "master"
It is valid yaml, see 'plain style' here:
https://stackoverflow.com/a/21699210
Or check youself with, say, tarantool yaml:
| unpack(require('yaml').decode(io.open('.travis.yml'):read(1000000)).jobs.include)
> if: branch = "master"
> - name: "LTO build + test (Linux, clang)"
> - env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON
> + env: TARGET=test CMAKE_EXTRA_PARAMS=-DENABLE_LTO=ON DOCKER_IMAGE=packpack/packpack:debian-buster
> if: branch = "master"
> compiler: clang
> - name: "LTO build + test (OS X Mojave 10.14)"
> diff --git a/src/box/memtx_rtree.c b/src/box/memtx_rtree.c
> index 45e8fb8e3..b91a405d7 100644
> --- a/src/box/memtx_rtree.c
> +++ b/src/box/memtx_rtree.c
> @@ -71,7 +71,7 @@ static inline int
> mp_decode_rect(struct rtree_rect *rect, unsigned dimension,
> const char *mp, unsigned count, const char *what)
> {
> - coord_t c;
> + coord_t c = 0;
> if (count == dimension) { /* point */
> for (unsigned i = 0; i < dimension; i++) {
> if (mp_decode_num(&mp, i, &c) < 0)
Ok.
> diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c
> index d2868567b..04083914a 100644
> --- a/src/box/sql/vdbeapi.c
> +++ b/src/box/sql/vdbeapi.c
> @@ -214,7 +214,7 @@ sql_value_double(sql_value * pVal)
> bool
> sql_value_boolean(sql_value *val)
> {
> - bool b;
> + bool b = false;
> mem_value_bool((struct Mem *) val, &b);
> return b;
> }
I would also update sql_value_double(), sql_value_int(),
sql_value_int64() to keep them consistent.
It also worth to explicitly express that we sure that the mem value has
needed type, like so:
| bool b = false;
| int rc = mem_value_bool(..., &b);
| assert(rc == 0);
| (void) rc;
| return b;
> diff --git a/src/box/tuple_update.c b/src/box/tuple_update.c
> index 849073258..7a203ced8 100644
> --- a/src/box/tuple_update.c
> +++ b/src/box/tuple_update.c
> @@ -1011,7 +1011,7 @@ update_read_ops(struct tuple_update *update, const char *expr,
> "field id must be a number");
> return -1;
> }
> - int32_t field_no;
> + int32_t field_no = 0;
> if (mp_read_i32(update->index_base, op, &expr, &field_no))
> return -1;
> if (field_no - update->index_base >= 0) {
Ok.
> diff --git a/src/httpc.c b/src/httpc.c
> index 80dabd59c..813a3e387 100644
> --- a/src/httpc.c
> +++ b/src/httpc.c
> @@ -267,7 +267,7 @@ httpc_set_low_speed_limit(struct httpc_request *req, long low_speed_limit)
> void
> httpc_set_verbose(struct httpc_request *req, bool curl_verbose)
> {
> - curl_easy_setopt(req->curl_request.easy, CURLOPT_VERBOSE, curl_verbose);
> + curl_easy_setopt(req->curl_request.easy, CURLOPT_VERBOSE, (long) curl_verbose);
Please, keep lines within 80 symbols.
> }
>
> void
> diff --git a/src/lua/httpc.c b/src/lua/httpc.c
> index c39a2f0de..c174ffce0 100644
> --- a/src/lua/httpc.c
> +++ b/src/lua/httpc.c
> @@ -64,9 +64,10 @@ static int
> parse_headers(lua_State *L, char *buffer, size_t len,
> int max_header_name_len)
> {
> - struct http_parser parser;
> - parser.hdr_name = (char *) calloc(max_header_name_len, sizeof(char));
> - if (parser.hdr_name == NULL) {
> + struct http_parser *parser = (struct http_parser *)
> + malloc(sizeof(*parser));
> + parser->hdr_name = (char *) calloc(max_header_name_len, sizeof(char));
> + if (parser->hdr_name == NULL) {
> diag_set(OutOfMemory, max_header_name_len * sizeof(char),
> "malloc", "hdr_name");
> return -1;
It seems dynamic allocation just prevents the warning from raising. I would fix
it in more straight way (see below). I didn't check this patch against warnings
with LTO, but it should help.
diff --git a/src/lib/http_parser/http_parser.c b/src/lib/http_parser/http_parser.c
index b9490117e..d0cba0d12 100644
--- a/src/lib/http_parser/http_parser.c
+++ b/src/lib/http_parser/http_parser.c
@@ -40,6 +40,16 @@
* adaptation from nginx http parser module
*/
+void http_parser_create(struct http_parser *parser)
+{
+ parser->hdr_value_start = NULL;
+ parser->hdr_value_end = NULL;
+ parser->http_major = -1;
+ parser->http_minor = -1;
+ parser->hdr_name = NULL;
+ parser->hdr_name_idx = 0;
+}
+
/**
* Utility function used in headers parsing
*/
diff --git a/src/lib/http_parser/http_parser.h b/src/lib/http_parser/http_parser.h
index 9d6cc0932..16c083b43 100644
--- a/src/lib/http_parser/http_parser.h
+++ b/src/lib/http_parser/http_parser.h
@@ -49,7 +49,13 @@ struct http_parser {
int hdr_name_idx;
};
-/*
+/**
+ * @brief Initialize an http parser.
+ * @param parser structure to initialize
+ */
+void http_parser_create(struct http_parser *parser);
+
+/**
* @brief Parse line containing http header info
* @param parser object
* @param bufp pointer to buffer with data
diff --git a/src/lua/httpc.c b/src/lua/httpc.c
index d3d80bfeb..bc8d498ba 100644
--- a/src/lua/httpc.c
+++ b/src/lua/httpc.c
@@ -65,6 +65,7 @@ parse_headers(lua_State *L, char *buffer, size_t len,
int max_header_name_len)
{
struct http_parser parser;
+ http_parser_create(&parser);
parser.hdr_name = (char *) calloc(max_header_name_len, sizeof(char));
if (parser.hdr_name == NULL) {
diag_set(OutOfMemory, max_header_name_len * sizeof(char),
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-05-16 16:22 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-16 6:26 [tarantool-patches] [PATCH v1] Fix LTO in travis-ci Alexander V. Tikhonov
2019-05-16 16:22 ` [tarantool-patches] " Alexander Turenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox