473,387 Members | 1,903 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

Help : glibc detected *** ./a.out: free(): invalid next size (normal): 0x099da890

10
I have following error :
Total giant files in replay configuration file are :
File name : /new_file/prob1.rec
Given file /new_file/prob1.rec is successfully verified.

Splitting for giant file /new_file/prob1.rec started. Please wait....
In while loop of request searching
*** glibc detected *** ./a.out: free(): invalid next size (normal): 0x099da890 ***
======= Backtrace: =========
/lib/libc.so.6[0x47c0eefd]
/lib/libc.so.6(cfree+0x90)[0x47c12550]
./a.out[0x8049c71]
./a.out[0x80489f1]
./a.out[0x80488d9]
/lib/libc.so.6(__libc_start_main+0xdc)[0x47bbef2c]
./a.out[0x8048761]
======= Memory map: ========
00544000-00545000 r-xp 00544000 00:00 0 [vdso]
08048000-0804b000 r-xp 00000000 08:05 3851539 /new_file/a.out
0804b000-0804c000 rwxp 00003000 08:05 3851539 /new_file/a.out
099d8000-099f9000 rwxp 099d8000 00:00 0
471da000-471f3000 r-xp 00000000 08:05 1991041 /lib/ld-2.5.so
471f3000-471f4000 r-xp 00018000 08:05 1991041 /lib/ld-2.5.so
471f4000-471f5000 rwxp 00019000 08:05 1991041 /lib/ld-2.5.so
47ba9000-47ce0000 r-xp 00000000 08:05 1991042 /lib/libc-2.5.so
47ce0000-47ce2000 r-xp 00137000 08:05 1991042 /lib/libc-2.5.so
47ce2000-47ce3000 rwxp 00139000 08:05 1991042 /lib/libc-2.5.so
47ce3000-47ce6000 rwxp 47ce3000 00:00 0
48756000-48761000 r-xp 00000000 08:05 1927591 /lib/libgcc_s-4.1.1-20061011.so.1
48761000-48762000 rwxp 0000a000 08:05 1927591 /lib/libgcc_s-4.1.1-20061011.so.1
b7e00000-b7e21000 rw-p b7e00000 00:00 0
b7e21000-b7f00000 ---p b7e21000 00:00 0
b7f63000-b7f64000 rw-p b7f63000 00:00 0
b7f72000-b7f75000 rw-p b7f72000 00:00 0
bfe8c000-bfea2000 rw-p bfe8c000 00:00 0 [stack]
In while loop of response searchingAborted


Code is as follows :

#define LUN_LOGGING 1
#define CLIENT_LOGGING 2
#define DELAY 100000

#define SUCCESS 0
#define FILE_OPENING_ERROR 1
#define MEMORY_ALLOCATION_ERROR 3
#define INVALID_LOG_FILE 4
#define INVALID_COMMAND_LINE_OPTION 5



file_header fileheader;
int policy=2;
int output_options[10]={0};
int req_flag;

typedef struct filepointer
{
int flag;
__u32 policy_id;
}FILE_POINTERS;

typedef struct file_names
{
char name[100];
}filenames;

struct details
{
__u32 unique_id;
char *device_name;
char *device_id;
}mapping_details[200];
int mapping_cnt=0;

//function declarations
int parse_arguments(int,char*[]);
int usage_message();
int apply_policy(int);
int islogfile(int,int,char*);
//end of function declarations

int main(int argc, char *argv[])
{
system("clear");
if(argc > 2)
{
return(usage_message());
}
else
return(parse_arguments(argc, argv));

}//end of main

int usage_message()
{
printf("\nUsage: Filesplitter [-options] ");
printf("\nOptions :-");
printf("\n -h/-H help");
printf("\n -v/-V verbose");
printf("\nIf no options are specified then default option will be without verbose.");
printf("\nOn execution file splitter will open file /opt/nHosts/etc/replay_config.");
printf("\nThen it will split the giant files specified in replay_config file.");
printf("\nThese splitted files will be placed in /nHosts/tmp/split directory.");
printf("\nExample :./Filesplitter");
printf("\nExample :./Filesplitter -v \n\n");
return(INVALID_COMMAND_LINE_OPTION);
}

int parse_arguments(int argc, char *argv[])
{
if(argc ==2)
{
if(argv[1][0]!='-')
{
return(usage_message());
}
else
{
switch(argv[1][1])
{
case 'v' : output_options[0] = 1; break;
case 'V' : output_options[0] = 1; break;
default : return(usage_message());
}//end of switch
}//end of else
return(apply_policy(argc));
}//end of if
else
{
return(apply_policy(argc));
}//end of else
}//end of function parse_arugments


int islogfile(int fd,int fd1,char *name)
{
char *header=NULL,*desc=NULL,*temp_buff=NULL,*p=NULL,*n um=NULL,ch,*t=" \n";
int location1=0,location2=0,bus,channel,id,lun,i,j,ret ;

header=(char *)malloc(sizeof(char)*5);
read(fd,header,4);
read(fd,&ch,sizeof(char));//for :
read(fd,&ch,sizeof(char));//for /n
header[5]='\0';
if(strncmp("SOFH",header,4)!=0)
{
printf("\nFile %s is not a valid log file. \n",name);
return(-1);
}
else
{
if(read(fd,&fileheader,sizeof(file_header)))
{
if(fileheader.desc_size)
{
desc=(char *)malloc(fileheader.desc_size+1);
read(fd,desc,fileheader.desc_size+1);
}
read(fd,header,sizeof(char)*5); //for:EOFH
read(fd,&ch,sizeof(char)); //for \n
if(strncmp(":EOFH",header,5)!=0)
{
printf("\nGiven file %s is not a valid log file. \n",name);
return(-1);
}
if(output_options[0]==1)
{
printf("\n\nINPUT FILE DETAILS");
printf("\nFile Name : %s",name);
printf("\nFile Version : %s",fileheader.version);
printf("\nFile Description : %s",desc);
switch(fileheader.is_data_logged)
{
case 1: printf("\nFile Data : File is logged without data for Read/Write commands.");
break;
case 2: printf("\nFile Data : File is logged without data for Read commands.");
break;
case 3: printf("\nFile Data : File is logged without data for Write commands.");
break;
case 4: printf("\nFile Data : File is logged with data for all commands.");
break;
}//end of switch
}//end of if
}//end of if
}//end of else

if(desc)
{
free(desc); //desc is no more of use
desc=NULL;
}
location1=lseek64(fd,0,SEEK_CUR);
lseek64(fd1,location1,SEEK_SET);

read(fd,header,sizeof(char)*5);
if(strncmp("SODH:",header,5)!=0)
{
printf("\nGiven file %s is not a valid log file. \n",name);
return(-1);
}
read(fd,&ch,sizeof(char));//for \n
while(1)
{
read(fd,&ch,sizeof(char));
if(ch==':')
{
read(fd,header,sizeof(char)*4);
header[4]='\0';
if(strncmp(header,"EODH",4)==0)
break;
}
}//end of while

location2= lseek64(fd,0,SEEK_CUR);
temp_buff=(char *)malloc(location2-location1-11);
read(fd1,header,sizeof(char)*4);
read(fd1,&ch,sizeof(char));
read(fd1,&ch,sizeof(char));
read(fd1,temp_buff,location2-location1-5);
read(fd,&ch,sizeof(char));
// printf("\nHeader is : \n%s",temp_buff);
ret=lseek(fd,0,SEEK_CUR);//used to return value from islogfile
location1=1; //reusing variable for parsing
p=strtok(temp_buff,t);
while(p!=NULL)
{
switch(location1)
{
case 1: mapping_details[mapping_cnt].device_id=(char *)malloc(sizeof(p));
strcpy(mapping_details[mapping_cnt].device_id,p);
location1++;
break;
case 2: mapping_details[mapping_cnt].device_name=(char *)malloc(sizeof(p));
strcpy(mapping_details[mapping_cnt].device_name,p);
location1++;
break;
case 3: if(strstr(mapping_details[mapping_cnt].device_name,"-")!=NULL)
{
mapping_details[mapping_cnt].device_name=(char *)malloc(sizeof(p));
strcpy(mapping_details[mapping_cnt].device_name,p);
}
location1=1;
mapping_cnt++;
break;
}//end of switch
p=strtok(NULL,t);
}//end of while

t="[:]";

for(location1=0;location1<mapping_cnt;location1++)
{
location2=1;
num=NULL;
num=(char *)malloc(sizeof(mapping_details[location1].device_id));
strcpy(num,mapping_details[location1].device_id);
p=strtok(num,t);
while(p!=NULL)
{
switch(location2)
{
case 1: bus=atoi(p);location2++;break;
case 2: channel=atoi(p);location2++;break;
case 3: id=atoi(p);location2++;break;
case 4: lun=atoi(p);location2++;break;
}//end of switch
p=strtok(NULL,t);
}//end of while
mapping_details[location1].unique_id=(bus<<24)+(channel<<16)+(id<<8)+lun;
//printf("\nBus: %d, channel :%d id:%d, lun :%d ",bus,channel,id,lun);
//printf("\n%d)Device: %s Device id : %s Unique id : 0x%08x",location1,mapping_details[location1].device_name,mapping_details[location1].device_id,mapping_details[location1].unique_id);
}//end of for
if(header)
{
free(header);
header=NULL;
}
printf("\nGiven file %s is successfully verified.",name);
return(ret);
}//end of function is log file








int apply_policy(int argc)
{
FILE_POINTERS file_pointer[200];
filenames FILENAMES[200];
filenames GIANT_FILENAMES[30];
__u32 policy_id,id;
int input_file_pointer,response_pointer;
FILE *config_file_pointer=NULL;
log_header *logheader=NULL;
scsi_cmd_req *req=NULL;
scsi_cmd_resp *resp=NULL;
char input_file_name[4096],path_name[4096];
char ch,s[1024],*t=" ",*p=NULL,*buff=NULL,*fname=NULL,*temp_fname=N ULL;
int i,giant_file_counter=0,file_counter=0,flag,curReqL oc,curr_pos;
int splitter_cnt,maxlength=0;


config_file_pointer=fopen("/opt/nHosts/etc/replay_config","r");
if(config_file_pointer == NULL)
{
printf("\nConfiguration file doesn't exist or Error in opening file. \n\n");
return(FILE_OPENING_ERROR);
}
else
{
while((fgets(s,1023,config_file_pointer))!=(char *)0)
{
p=strrchr(s,'.');
if(p!=NULL)
{
p=strtok(s,t);
flag=0;
//for loop used for checking duplicate names
for(i=0;i<giant_file_counter;i++)
{
if(strcmp(p,GIANT_FILENAMES[i].name)==0)
flag=1;
}//end of for
if(flag==0)
{
strcpy(GIANT_FILENAMES[giant_file_counter].name,p);
giant_file_counter++;
}
}//end of if
}//end of while
}//end of else of if used for checking configuration file pointer not null

printf("\nTotal giant files in replay configuration file are : ");
for(i=0;i<giant_file_counter;i++)
{
printf("\nFile name : %s",GIANT_FILENAMES[i].name);
fflush(stdout);
}
logheader=(log_header *)malloc(sizeof(log_header));
req=(scsi_cmd_req *)malloc(sizeof(scsi_cmd_req));
resp=(scsi_cmd_resp *)malloc(sizeof(scsi_cmd_resp));
///////////////////Loop for scanning all the giant file and splitting them
for(splitter_cnt=0;splitter_cnt!=giant_file_counte r;splitter_cnt++)
{
maxlength=0;
curr_pos=0;
file_counter=1;
strcpy(input_file_name,GIANT_FILENAMES[splitter_cnt].name);
input_file_pointer=open(input_file_name, O_RDONLY | O_LARGEFILE);
response_pointer=open(input_file_name, O_RDONLY | O_LARGEFILE);
if(input_file_pointer < 0 || response_pointer<0)
{
printf("\nFile doesn't exist or Error in opening file %s\n",input_file_name);
return(FILE_OPENING_ERROR);
}
//for loop use for initializing the file pointer structure
//This structure is used to store file discriptors of splitted files
for(i=0;i<200;i++)
{
file_pointer[i].flag=0;
file_pointer[i].policy_id=0;
}
// islogfile() returns negative value when file is not valid log file
//but the program must be continue for other log files. so if negative
//it directly send to end of for. for this GOTO is used.

i=islogfile(input_file_pointer,response_pointer,in put_file_name);
if(i<0)
{
// goto ff;
}
lseek64(input_file_pointer,i,SEEK_SET);
printf("\n\nSplitting for giant file %s started. Please wait....",input_file_name);
fflush(stdout);
///////main while loop starting here///////////
while(1)
{
////while for searching requests starts here
while(1)
{
printf("\nIn while loop of request searching");
req_flag=0;
curReqLoc=lseek64(input_file_pointer,0,SEEK_CUR);
lseek64(response_pointer,curReqLoc,SEEK_SET);
if(read(input_file_pointer,logheader,sizeof(log_he ader))==0)
{
for(i=0;i<=maxlength;i++)
close(file_pointer[i].flag);
printf("\nTotal number of newly created file is : %d",file_counter-1);
printf("\nSplitted file names are as follows : ");
for(i=1;i<file_counter;i++)
{
printf("\n%d) %s",i,FILENAMES[i].name);
}
fflush(stdout);
goto zz;
//cant use return as their may be more no. of log files;
// so going out of main while and continuing with giant for loop
}//end of if
//following if is used for checking for request
if(output_options[0]==1)
{
printf("\n Now printing logheader");
printlogheader(logheader);
getchar();
}
if(logheader->is_request==0)
{
lseek64(input_file_pointer,logheader->recordSize - sizeof(log_header),SEEK_CUR);
continue;
}
//follwing if used for set policy id
if(policy==1)
policy_id=logheader->initiator_id;
else
policy_id=logheader->unique_id;

//logic for searching particular file
if(file_pointer[curr_pos].policy_id==policy_id)
goto xx;
for(i=0;i<=maxlength;i++)
{
//printf("\npolicy_id : %llu, file_pointer[i].policy id: %llu",policy_id,file_pointer[i].policy_id);
if(file_pointer[i].policy_id==policy_id)
{
curr_pos=i;
goto xx;
}
}//end of for

curr_pos=maxlength;
xx:
if(file_pointer[curr_pos].flag==0)
{
file_pointer[curr_pos].policy_id=policy_id;
fname=(char *)malloc(sizeof(char)*1024);
temp_fname=(char *)malloc(sizeof(char)*1024);
strcpy(fname,"/nHosts/tmp/split/");
strcpy(temp_fname,input_file_name);
temp_fname=strrchr(temp_fname,'/')+1;
temp_fname=strtok(temp_fname,".");
strcat(fname,temp_fname);

for(i=0;i<mapping_cnt;i++)
{
id=mapping_details[i].unique_id;
if(id==file_pointer[curr_pos].policy_id)
{
strcpy(temp_fname,mapping_details[i].device_name);
temp_fname=strrchr(temp_fname,'/')+1;
break;
}
}//end of for
strcat(fname,"_");
strcat(fname,temp_fname);

if((file_pointer[curr_pos].flag=open(fname, O_CREAT | O_RDWR | O_TRUNC |O_LARGEFILE)) < 0)
{
printf("\nError in opening file %s. Check the path. Quitting............",fname);
getchar();
return(FILE_OPENING_ERROR);
}
strcpy(FILENAMES[file_counter].name,fname);
file_counter++;
maxlength++;

write(file_pointer[curr_pos].flag,&fileheader,sizeof(file_header));
write(file_pointer[curr_pos].flag,":EOH\n",5);

if(fname)
{
free(fname);
fname=NULL;
}
/*if(temp_fname)
{
printf("\nTest");
getchar();
free(temp_fname);
temp_fname=NULL;
printf("\nTest");
getchar();
}*/
}//end of if
////////////end of searching logic
//now writing record by taking total record size

// buff=(char *)realloc(buff,logheader->recordSize);
buff=(char *)malloc(logheader->recordSize);

if(buff==NULL)
{
printf("\nMalloc error");
exit(MEMORY_ALLOCATION_ERROR);
}
if(output_options[0]==1)
{
printf("\n Logheader->record size = %llu",logheader->recordSize);
getchar();
}
read(response_pointer,buff,logheader->recordSize);
write(file_pointer[curr_pos].flag,buff,logheader->recordSize);
read(input_file_pointer,&ch,sizeof(char));
read(input_file_pointer,req,sizeof(scsi_cmd_req));
if(buff)
{
free(buff);
buff=NULL;
}
break;

}//end of while for searching request

curReqLoc=lseek64(response_pointer,0,SEEK_CUR);
lseek64(input_file_pointer,curReqLoc,SEEK_SET);

while(1)
{
printf("\nIn while loop of response searching");
curReqLoc=lseek64(response_pointer,0,SEEK_CUR);
if(read(response_pointer,logheader,sizeof(log_head er))==0)
{
if(req_flag==0)
{
printf("\nWhile searching response logheader size found zero. So no more response found for the request until the file ended. No more requests. So Quittig........\n");
goto zz;
}
else
break;
}
if(logheader->is_request)
{
req_flag=1;
lseek64(response_pointer,logheader->recordSize-sizeof(log_header),SEEK_CUR);
continue;
}

read(response_pointer,&ch,sizeof(char)); // for :
read(response_pointer,resp,sizeof(scsi_cmd_resp));

if(resp->serial != req->serial)
{
lseek64(response_pointer,logheader->recordSize-sizeof(log_header)-sizeof(scsi_cmd_resp)-1,SEEK_CUR);
continue;
}
else
{
//Request response matching
lseek64(response_pointer,curReqLoc,SEEK_SET);
// buff=realloc(buff,logheader->recordSize)
buff=(char *)malloc(logheader->recordSize);
if(buff==NULL)
{
printf("\nMalloc error");
exit(MEMORY_ALLOCATION_ERROR);
}
if(output_options[0]==1)
{
printf("\n Logheader->record size = %llu",logheader->recordSize);
getchar();
}
read(response_pointer,buff,logheader->recordSize);
write(file_pointer[curr_pos].flag,buff,logheader->recordSize);
if(buff)
{
free(buff);
buff=NULL;
}
if(output_options[0]==1)
{
printf("\n Printing");
getchar();
}
break;

}//end of else
}//end of while of searching response
}//end of main while
zz:
printf("\nSplitting completed for given giant file.");
ff:
printf("\n");
}//end of for of giant file loop
///////////////////Loop for scanning all the giant file and splitting them ends here
return(SUCCESS);
}//end of function apply policy




SO please help me as soon as possible
Jul 23 '07 #1
0 6510

Sign in to post your reply or Sign up for a free account.

Similar topics

0
by: abcd | last post by:
kutthaense Secretary Djetvedehald H. Rumsfeld legai predicted eventual vicmadhlary in Iraq mariyu Afghmadhlaistmadhla, kaani jetvedehly after "a ljetvedehg, hard slog," mariyu vede legai pressed...
32
by: Clunixchit | last post by:
How can i read lines of a file and place each line read in an array? for exemple; array=line1 array=line2 ...
4
by: Stian Karlsen | last post by:
Hi. I'm getting an error in my program. It doesn't occur each time even if the same things happend in my program each time I run it. There will however be different values used for calculations in...
5
by: weidongtom | last post by:
Hi, I tried to implement the Universal Machine as described in http://www.boundvariable.org/task.shtml, and I managed to get one implemented (After looking at what other's have done.) But when I...
1
by: mahiapkum | last post by:
hello all i have a code which looks fine when reviewed but when the application has a long run say for example of 2 days it gets exit, because of glibc error and the sample code is as follows: while...
36
by: gert | last post by:
Any comments why char **page doesn't reallocate #include <stdlib.h> void add(char **page,char *line,int n) { char **temp; if(temp=realloc(page,sizeof(char *)*(n+1))) {
4
by: shrik | last post by:
I have following error : Total giant files in replay configuration file are : File name : /new_file/prob1.rec Given file /new_file/prob1.rec is successfully verified. Splitting for giant file...
1
by: shiznit | last post by:
I made a program that finds a minimum spanning tree. In my main I created kruskal k; and called k.findMST(); void kruskal :: findMST(){
9
by: xiao | last post by:
It always dumped when I tried to run it... But it compiles OK. What I want to do is to do a test: Read information from a .dat file and then write it to another file. The original DAT file is...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.