Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] The segfault issue occurs when the smc_run command is used to test the MySQL database #9

Open
zhengchaoshao opened this issue Apr 19, 2024 · 1 comment

Comments

@zhengchaoshao
Copy link

When I was using smc_run to test mysql on x86 or arm64, the segfault issue occurred.
Use the gdb to parse the core file. The information is as follows:
(gdb) bt
#0 0x0000000000000000 in ?? ()
#1 0x00007f3cf0bd6374 in socket (domain=43, type=1, protocol=0) at smc-preload.c:117
#2 0x00007f3cf058b05d in ?? () from /usr/lib64/mysql/libmysqlclient.so.21
#3 0x00007f3cf0586249 in mysql_real_connect () from /usr/lib64/mysql/libmysqlclient.so.21
#4 0x000000000041ac9c in mysql_drv_real_connect (db_mysql_con=db_mysql_con@entry=0x7f3cc8000e40) at drv_mysql.c:351
#5 0x000000000041c24c in mysql_drv_connect (sb_conn=0x7f3cc8000db0) at drv_mysql.c:435
#6 mysql_drv_connect (sb_conn=0x7f3cc8000db0) at drv_mysql.c:370
#7 0x000000000040e781 in db_connection_create (drv=0x4a85c0 <mysql_driver>) at db_driver.c:329
#8 0x000000000043b956 in lj_vm_ffi_call ()
#9 0x000000000045d09c in lj_ccall_func ()
#10 0x00000000004379bd in lj_cf_ffi_meta___call ()
#11 0x00000000004399b7 in lj_BC_FUNCC ()
#12 0x0000000000427b0c in lua_pcall ()
#13 0x0000000000414bdf in sb_lua_op_thread_init (thread_id=4) at sb_lua.c:461
#14 0x000000000040c411 in worker_thread (arg=) at sysbench.c:809
#15 0x00007f3cefe1b22a in ?? () from /usr/lib64/libc.so.6
#16 0x00007f3cefe9dcf0 in ?? () from /usr/lib64/libc.so.6

The function pointed to by orig_socket is NULL.
The analysis is as follows:
CPUA CPUB
socket
initialize
dl_handle = dlopen(...
socket //dl_handle!=NULL
rc = (*orig_socket)(... //orig_socket is NULL,cause segfault

I think this issue occurs when users create sockets in multiple threads.
I'm not very familiar with smc-tool, and ask for help here.

I tried the following modifications to work around this problem, but it didn't solve the problem.
diff --git a/smc-preload.c b/smc-preload.c
index ee0ac83..83c5d80 100644
--- a/smc-preload.c
+++ b/smc-preload.c
@@ -96,6 +96,7 @@ static void set_bufsize(int socket, int opt, const char *envname) {
int socket(int domain, int type, int protocol)
{
int rc;

  • int cnt = 0;

    if (!dl_handle)
    initialize();
    @@ -114,6 +115,16 @@ int socket(int domain, int type, int protocol)
    domain = AF_SMC;
    }

  • while (orig_socket == NULL && cnt < 10) {

  •   usleep(10000);
    
  •   cnt++;
    
  • }

  • if (orig_socket == NULL) {

  •   printf("Failed to create socket, orig_socket is NULL\n");
    
  •   return -1;
    
  • }

  • rc = (*orig_socket)(domain, type, protocol);
    if (rc != -1) {
    set_bufsize(rc, SO_SNDBUF, "SMC_SNDBUF");

@GuangguanWang
Copy link

#7
This PR may help resolving the issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants