diff options
author | Xiubo Li <xiubli@redhat.com> | 2019-07-26 12:34:52 +0800 |
---|---|---|
committer | hari gowtham <hari.gowtham005@gmail.com> | 2019-08-28 08:34:45 +0000 |
commit | f7d1fa51cf7308a6d68ed9fa1e8cc4a7c66ad121 (patch) | |
tree | a0e119d85908bc13aa39377674d6dec7004b97c6 /cli | |
parent | 2c46789ad04500b1e31585c6d51cd925d2ad895d (diff) |
event: rename event_XXX with gf_ prefixed
I hit one crash issue when using the libgfapi.
In the libgfapi it will call glfs_poller() --> event_dispatch()
in file api/src/glfs.c:721, and the event_dispatch() is defined
by libgluster locally, the problem is the name of event_dispatch()
is the extremly the same with the one from libevent package form
the OS.
For example, if a executable program Foo, which will also use and
link the libevent and the libgfapi at the same time, I can hit the
crash, like:
kernel: glfs_glfspoll[68486]: segfault at 1c0 ip 00007fef006fd2b8 sp
00007feeeaffce30 error 4 in libevent-2.0.so.5.1.9[7fef006ed000+46000]
The link for Foo is:
lib_foo_LADD = -levent $(GFAPI_LIBS)
It will crash.
This is because the glfs_poller() is calling the event_dispatch() from
the libevent, not the libglsuter.
The gfapi link info :
GFAPI_LIBS = -lacl -lgfapi -lglusterfs -lgfrpc -lgfxdr -luuid
If I link Foo like:
lib_foo_LADD = $(GFAPI_LIBS) -levent
It will works well without any problem.
And if Foo call one private lib, such as handler_glfs.so, and the
handler_glfs.so will link the GFAPI_LIBS directly, while the Foo won't
and it will dlopen(handler_glfs.so), then the crash will be hit everytime.
The link info will be:
foo_LADD = -levent
libhandler_glfs_LIBADD = $(GFAPI_LIBS)
I can avoid the crash temporarily by linking the GFAPI_LIBS in Foo too like:
foo_LADD = $(GFAPI_LIBS) -levent
libhandler_glfs_LIBADD = $(GFAPI_LIBS)
But this is ugly since the Foo won't use any APIs from the GFAPI_LIBS.
And in some cases when the --as-needed link option is added(on many dists
it is added as default), then the crash is back again, the above workaround
won't work.
Backport of:
> https://review.gluster.org/#/c/glusterfs/+/23110/
> Change-Id: I38f0200b941bd1cff4bf3066fca2fc1f9a5263aa
> Fixes: #699
> Signed-off-by: Xiubo Li <xiubli@redhat.com>
Change-Id: I38f0200b941bd1cff4bf3066fca2fc1f9a5263aa
updates: bz#1740525
Signed-off-by: Xiubo Li <xiubli@redhat.com>
(cherry picked from commit 799edc73c3d4f694c365c6a7c27c9ab8eed5f260)
Diffstat (limited to 'cli')
-rw-r--r-- | cli/src/cli-rl.c | 6 | ||||
-rw-r--r-- | cli/src/cli.c | 6 |
2 files changed, 6 insertions, 6 deletions
diff --git a/cli/src/cli-rl.c b/cli/src/cli-rl.c index b6f87b189aa..7a38a0b882a 100644 --- a/cli/src/cli-rl.c +++ b/cli/src/cli-rl.c @@ -112,7 +112,7 @@ cli_rl_stdin(int fd, int idx, int gen, void *data, int poll_out, int poll_in, rl_callback_read_char(); - event_handled(state->ctx->event_pool, fd, idx, gen); + gf_event_handled(state->ctx->event_pool, fd, idx, gen); return; } @@ -379,8 +379,8 @@ cli_rl_enable(struct cli_state *state) goto out; } - ret = event_register(state->ctx->event_pool, 0, cli_rl_stdin, state, 1, 0, - 0); + ret = gf_event_register(state->ctx->event_pool, 0, cli_rl_stdin, state, 1, + 0, 0); if (ret == -1) goto out; diff --git a/cli/src/cli.c b/cli/src/cli.c index a2c4496a5d8..8a3f02dff15 100644 --- a/cli/src/cli.c +++ b/cli/src/cli.c @@ -122,8 +122,8 @@ glusterfs_ctx_defaults_init(glusterfs_ctx_t *ctx) goto out; } - ctx->event_pool = event_pool_new(DEFAULT_EVENT_POOL_SIZE, - STARTING_EVENT_THREADS); + ctx->event_pool = gf_event_pool_new(DEFAULT_EVENT_POOL_SIZE, + STARTING_EVENT_THREADS); if (!ctx->event_pool) { gf_log("cli", GF_LOG_ERROR, "Failed to create event pool."); goto out; @@ -863,7 +863,7 @@ main(int argc, char *argv[]) if (ret) goto out; - ret = event_dispatch(ctx->event_pool); + ret = gf_event_dispatch(ctx->event_pool); out: // glusterfs_ctx_destroy (ctx); |