两次fclose引发的血案
/mnt/diskc/db/app/bin/mysqld: double free or corruption (out): 0x00007f09cc00c900 ***
======= Backtrace: =========
/lib64/libc.so.6[0x31434760e6]
/lib64/libc.so.6[0x3143478c13]
/lib64/libc.so.6(fclose+0x14d)[0x314346674d]
/mnt/diskc/db/app/bin/mysqld(……内部代码……)[0x781d59] …… /lib64/libpthread.so.0[0x3143c07851]
/lib64/libc.so.6(clone+0x6d)[0x31434e890d]
二挂死:
Thread 2 (Thread 0x7f8a6c074700 (LWP 1506)):
#0 0x00000031434f806e in __lll_lock_wait_private () from /lib64/libc.so.6
#1 0x0000003143466815 in _L_lock_36 () from /lib64/libc.so.6
#2 0x0000003143466652 in fclose@@GLIBC_2.2.5 () from /lib64/libc.so.6
#3 0x00000000007828f6 in …………内部代码………… ()
#5 0x00000000005e9e7d in closefrm(TABLE*, bool) ()
#6 0x0000000000543122 in free_cache_entry(TABLE*) ()
#7 0x000000000054be7c in close_cached_tables(THD*, TABLE_LIST*, bool, unsigned long) ()
#8 0x000000000054c1a4 in table_def_start_shutdown() ()
#9 0x0000000000512f6c in clean_up(bool) ()
#10 0x00000000005131ee in unireg_end() ()
#11 0x0000000000514b82 in kill_server ()
#12 0x0000000000514c3e in kill_server_thread ()
#13 0x0000003143c07851 in start_thread () from /lib64/libpthread.so.0
#14 0x00000031434e890d in clone () from /lib64/libc.so.6
OpenFile(FILE* fp)
{
if (fp != NULL)
fclose(fp); fopen(fp,,,,,);
}
而在某些处理后需要关闭时,操作为:
fclose(fp);
fclose(fp);
fp = NULL;
RETURN VALUE
Upon successful completion 0 is returned. Otherwise, EOF is returned and errno is
set to indicate the error. In either case any further access (including
another call to fclose()) to the stream results in undefined behavior.
#include <stdio.h>
#include <pthread.h> char szPath[312] = {0};
char readbuf[312] = {0}; void* thread_func(void* p)
{
printf("\n\n....hello from son thread %d\n", pthread_self());
FILE *fp_r = NULL;
fp_r = fopen(szPath, "rb+");
printf("fp_r=%d after fopen rb+ \n", fp_r); if (fp_r == NULL)
return NULL; if (fread(readbuf, 10, 1, fp_r) < 0 )
{
printf("read fp_r error!!\n");
return NULL;
}
printf("read fp_r ok!!\n");
sleep(10); fclose(fp_r);
printf("close fp_r ok!!\n"); pthread_exit(NULL);
} int main()
{
FILE *fp_w = NULL; pthread_t t_id ; sprintf(szPath, "/disk1/tmp"); fp_w = fopen(szPath, "wb+");
printf("fp_w=%d after fopen wb+ \n", fp_w); if (fp_w == NULL)
{
return 0;
} if (fwrite(szPath, sizeof(szPath), 1, fp_w) != 1)
{
return -1;
} fclose(fp_w);
printf("fp_w=%d after fclose wb+ \n", fp_w);
fp_w = NULL; fp_w = fopen(szPath, "rb+");
printf("fp_w=%d after fopen rb+ \n", fp_w); if (fp_w == NULL)
return -1; if (fread(readbuf, 10, 1, fp_w) < 0)
{
printf("read fp_w error!!\n");
return -1;
}
printf("read fp_w ok!!\n"); if (pthread_create(&t_id, NULL, &thread_func, (void*)&t_id) != 0)
{
printf(" pthread_create fail!! \n");
return -1;
}
printf("create thread done.\n");
sleep(3); fclose(fp_w);
printf("close fp_w ok!!\n");
pthread_join(t_id,NULL);
printf("-----------------------\n"); return 0;
}
编译命令为:gcc tfclose.c -lpthread
两次fclose引发的血案的更多相关文章
- dubbox微服务实例及引发的“血案”
		Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 主要核心部件: Remoting: 网络通信框架 ... 
- Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)
		<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ... 
- 转:一个Sqrt函数引发的血案
		转自:http://www.cnblogs.com/pkuoliver/archive/2010/10/06/1844725.html 源码下载地址:http://diducoder.com/sotr ... 
- 一个Sqrt函数引发的血案(转)
		作者: 码农1946 来源: 博客园 发布时间: 2013-10-09 11:37 阅读: 4556 次 推荐: 41 原文链接 [收藏] 好吧,我承认我标题党了,不过既然你来了, ... 
- 一个字母引发的血案 java.io.File中mkdir()和mkdirs()
		一个字母引发的血案 明天开始放年假了,临放假前有个爬虫的任务,其中需要把网络图片保存到本地,很简单,马上写完了代码: //省略部分代码... Long fileId= (Long) data.get( ... 
- form表单提交引发的血案
		最近,公司某条产品线上的一个功能出了问题:点击查询的时候,该页面在IE上直接卡死,chrome上会卡顿一段时间候提交表单进行查询.拿到这个bug单子以后,简单重现了下,基本上定位到是查询操作中的问题, ... 
- elasticsearch5.0.1集群一次误删除kibana索引引发的血案
		elasticsearch集群中一次删除kibana索引引发的血案 1.问题发生的过程: 早上的时候有某个索引无法看到报表数据,于是就点该报表多次,估计集群被点挂了,报错:Elasticsearch ... 
- 一个无锁消息队列引发的血案(六)——RingQueue(中) 休眠的艺术 [续]
		目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ... 
- 一个无锁消息队列引发的血案(五)——RingQueue(中) 休眠的艺术
		目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ... 
随机推荐
- WP8中的地图和导航
			原文 WP8中的地图和导航 代码示例 源文件: Media:MapSample.zip 测试基于 SDK: Windows Phone SDK 8.0 兼容于 平台: Windows Phone 8 ... 
- orcl 删除重复的行
			delete from FOODDETAIL t where t.id in (select t.id from FOODDETAIL where t.sendtime>=to_date(' ... 
- String,StringBuffer以及StringBuilder的差别
			1.定义: String:String 类代表字符串. Java 程序中的全部字符串字面值(如"abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改. 字符 ... 
- kafka解释三的具体:发展Kafka应用
			一个.整体外观Kafka 我们知道.Kafka系统有三大组件:Producer.Consumer.broker . producers 生产(produce)消息(message)并推(push)送给 ... 
- 深入浅出KnockoutJS
			深入浅出KnockoutJS 写在前面,本文资料大多来源网上,属于自己的学习笔记整理. 其中主要内容来自learn.knockoutjs.com,源码解析部分资料来自司徒正美博文<knockou ... 
- Android开发之使用Handler封装下载图片工具类(源码分享)
			假设每下载一张图片,就得重写一次Http协议,多线程的启动和handler的信息传递就显得太麻烦了,我们直接来封装一个工具类,便于我们以后在开发时随时能够调用. (1)在清单文件加入权限 <us ... 
- 变化App.config其中值,并保存
			using System; using System.Collections.Generic; using System.Configuration; using System.IO; using S ... 
- OS调度算法常用摘要
			一.常见的批处理作业调度 1.先来先服务调度算法(FCFS):就是依照各个作业进入系统的自然次序来调度作业.这样的调度算法的长处是实现简单,公平. 其缺点是没有考虑到系统中各种资源的综合使用情况,往往 ... 
- Java Swing TextArea 滚动条和获得焦点
			JTextArea text=new JTextArea(); text.setLineWrap(true);//设置自己主动换行,之后则不须要设置水平滚动栏 JScrollPane scroll=n ... 
- Jenkins详细安装与构建部署使用教程(转)
			Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1.持续的软件版本发布 ... 
