免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: eveson

[C] linux c mysql 第二次操作崩溃 [复制链接]

论坛徽章:
0
发表于 2014-12-04 10:04 |显示全部楼层
看这次debug的信息
  1. (gdb) bt
  2. #0  mysql_send_query (mysql=0x48608048, query=0x47205c60 "INSERT INTO T_Test (ClientFlag,TimeFlag) VALUES(3, 6)", length=53)
  3.     at /export/home/pb2/build/sb_0-13191046-1410444393.17/rpm/BUILD/mysql-5.6.21/mysql-5.6.21/sql-common/client.c:4166
  4. #1  0x00000000004111b1 in mysql_real_query (mysql=0x48608048, query=0x47205c60 "INSERT INTO T_Test (ClientFlag,TimeFlag) VALUES(3, 6)", length=53)
  5.     at /export/home/pb2/build/sb_0-13191046-1410444393.17/rpm/BUILD/mysql-5.6.21/mysql-5.6.21/sql-common/client.c:4180
  6. #2  0x000000000040eb4a in DBConPool_ExecuteSql (pConHandle=0x48608048, pSql=0x47205c60 "INSERT INTO T_Test (ClientFlag,TimeFlag) VALUES(3, 6)")
  7.     at ../../DBConnectionPool/src/DBConPool.c:323
  8. #3  0x0000000000409c9b in InsertDB_For_Test (pDBConn=0x48608048, pTest=0x163f473c) at ../../../Server/src/AccessDB.c:71
  9. #4  0x0000000000409d8f in Act_Test (pMsg=0x163f4734) at ../../../Server/src/Action.c:67
  10. #5  0x000000000040a64c in thread_routine (arg=0x166ea774) at ../../ThreadPool/src/ThreadPool.c:255
  11. #6  0x0000003445a064a7 in start_thread () from /lib64/libpthread.so.0
  12. #7  0x0000003444ed3c2d in clone () from /lib64/libc.so.6
  13. (gdb) c
  14. Continuing.
  15. poll_wait:: Interrupted system call

  16. Program received signal SIGSEGV, Segmentation fault.
  17. 0x000000000041118e in mysql_send_query (mysql=0x48608048, query=0x47205c60 "INSERT INTO T_Test (ClientFlag,TimeFlag) VALUES(3, 6)", length=53)
  18.     at /export/home/pb2/build/sb_0-13191046-1410444393.17/rpm/BUILD/mysql-5.6.21/mysql-5.6.21/sql-common/client.c:4168
  19. 4168    in /export/home/pb2/build/sb_0-13191046-1410444393.17/rpm/BUILD/mysql-5.6.21/mysql-5.6.21/sql-common/client.c
  20. (gdb) bt
  21. #0  0x000000000041118e in mysql_send_query (mysql=0x48608048, query=0x47205c60 "INSERT INTO T_Test (ClientFlag,TimeFlag) VALUES(3, 6)", length=53)
  22.     at /export/home/pb2/build/sb_0-13191046-1410444393.17/rpm/BUILD/mysql-5.6.21/mysql-5.6.21/sql-common/client.c:4168
  23. #1  0x00000000004111b1 in mysql_real_query (mysql=0x48608048, query=0x3 <Address 0x3 out of bounds>, length=0)
  24.     at /export/home/pb2/build/sb_0-13191046-1410444393.17/rpm/BUILD/mysql-5.6.21/mysql-5.6.21/sql-common/client.c:4180
  25. #2  0x000000000040eb4a in DBConPool_ExecuteSql (pConHandle=0x48608048, pSql=0x47205c60 "INSERT INTO T_Test (ClientFlag,TimeFlag) VALUES(3, 6)")
  26.     at ../../DBConnectionPool/src/DBConPool.c:323
  27. #3  0x0000000000409c9b in InsertDB_For_Test (pDBConn=0x48608048, pTest=0x163f473c) at ../../../Server/src/AccessDB.c:71
  28. #4  0x0000000000409d8f in Act_Test (pMsg=0x163f4734) at ../../../Server/src/Action.c:67
  29. #5  0x000000000040a64c in thread_routine (arg=0x166ea774) at ../../ThreadPool/src/ThreadPool.c:255
  30. #6  0x0000003445a064a7 in start_thread () from /lib64/libpthread.so.0
  31. #7  0x0000003444ed3c2d in clone () from /lib64/libc.so.6
  32. (gdb)
复制代码

论坛徽章:
0
发表于 2014-12-04 14:15 |显示全部楼层
就这么个简单的测试程序,也是第一次操作成功,第二次操作失败
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <mysql/mysql.h>
  5. //gcc -g -o conn conn.c -L/usr/lib64/mysql -lmysqlclient  -lstdc++ -lpthread  -ldl -lrt
  6. int main(void)
  7. {
  8.         MYSQL *DBConn;
  9.         char psql[1024];
  10.         DBConn = mysql_init(NULL);

  11.         if(!mysql_real_connect(DBConn, "127.0.0.1", "root", "root", "mydata", 3306, NULL, 0))
  12.         {
  13.                 return -1;
  14.         }

  15.         sprintf(psql, "select * from T_Test");
  16.         while (1)
  17.         {
  18.                 if (mysql_real_query(DBConn, psql, strlen(psql)))
  19.                 {
  20.                         printf("Query Failed\n");
  21.                         return -1;
  22.                 }
  23.                 printf("Query Success\n");
  24.                 sleep(1);
  25.         }
  26.         mysql_close(DBConn);
  27.         return 0;
  28. }
复制代码

论坛徽章:
0
发表于 2014-12-04 14:28 |显示全部楼层
加了这个就行了,实在不好意思,用的不熟啊。呵呵
  1.                 res=mysql_store_result(DBConn);
  2.                 mysql_free_result(res);
复制代码

论坛徽章:
0
发表于 2014-12-04 15:39 |显示全部楼层
这个问题解决了,但是有新的问题:
创建了100个线程,100个数据库连接,每个线程有一个数据库连接,同时操作数据库,这样还是出错,出错信息和位置跟前面一样。这怎么办,mysql应该支持多线程吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP