Error using smaug projects

Posted by Lerkista on Mon 22 Sep 2014 12:07 PM — 3 posts, 15,490 views.

#0
Today i discover the project command, so i try and add a project, then i made a hotboot, and i get this error:


Mon Sep 22 14:51:01 2014 :: Loading Projects
*** glibc detected *** smaug: double free or corruption (!prev): 0x000000000243f630 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x75e76)[0x7f19fe257e76]
/lib64/libc.so.6(+0x789b3)[0x7f19fe25a9b3]
/lib64/libc.so.6(fclose+0x14d)[0x7f19fe2484dd]
smaug(_Z13load_projectsv+0x10b)[0x4f5918]
smaug(_Z7boot_dbb+0x2029)[0x4da7d4]
smaug(main+0x33c)[0x4cba3f]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x7f19fe200d5d]
smaug[0x424e29]
======= Memory map: ========
00400000-0066b000 r-xp 00000000 08:06 37883853                           /home/lerkista/Mud/smaugfuss19/src/smaug
0086b000-0086d000 rw-p 0026b000 08:06 37883853                           /home/lerkista/Mud/smaugfuss19/src/smaug
0086d000-008dd000 rw-p 00000000 00:00 0 
01f7e000-02460000 rw-p 00000000 00:00 0                                  [heap]
7f19fe1e2000-7f19fe36c000 r-xp 00000000 08:06 59769643                   /lib64/libc-2.12.so
7f19fe36c000-7f19fe56c000 ---p 0018a000 08:06 59769643                   /lib64/libc-2.12.so
7f19fe56c000-7f19fe570000 r--p 0018a000 08:06 59769643                   /lib64/libc-2.12.so
7f19fe570000-7f19fe571000 rw-p 0018e000 08:06 59769643                   /lib64/libc-2.12.so
7f19fe571000-7f19fe576000 rw-p 00000000 00:00 0 
7f19fe576000-7f19fe58c000 r-xp 00000000 08:06 59769047                   /lib64/libgcc_s-4.4.7-20120601.so.1
7f19fe58c000-7f19fe78b000 ---p 00016000 08:06 59769047                   /lib64/libgcc_s-4.4.7-20120601.so.1
7f19fe78b000-7f19fe78c000 rw-p 00015000 08:06 59769047                   /lib64/libgcc_s-4.4.7-20120601.so.1
7f19fe78c000-7f19fe80f000 r-xp 00000000 08:06 59776873                   /lib64/libm-2.12.so
7f19fe80f000-7f19fea0e000 ---p 00083000 08:06 59776873                   /lib64/libm-2.12.so
7f19fea0e000-7f19fea0f000 r--p 00082000 08:06 59776873                   /lib64/libm-2.12.so
7f19fea0f000-7f19fea10000 rw-p 00083000 08:06 59776873                   /lib64/libm-2.12.so
7f19fea10000-7f19feaf8000 r-xp 00000000 08:06 59769819                   /usr/lib64/libstdc++.so.6.0.13
7f19feaf8000-7f19fecf8000 ---p 000e8000 08:06 59769819                   /usr/lib64/libstdc++.so.6.0.13
7f19fecf8000-7f19fecff000 r--p 000e8000 08:06 59769819                   /usr/lib64/libstdc++.so.6.0.13
7f19fecff000-7f19fed01000 rw-p 000ef000 08:06 59769819                   /usr/lib64/libstdc++.so.6.0.13
7f19fed01000-7f19fed16000 rw-p 00000000 00:00 0 
7f19fed16000-7f19fed18000 r-xp 00000000 08:06 59776872                   /lib64/libdl-2.12.so
7f19fed18000-7f19fef18000 ---p 00002000 08:06 59776872                   /lib64/libdl-2.12.so
7f19fef18000-7f19fef19000 r--p 00002000 08:06 59776872                   /lib64/libdl-2.12.so
7f19fef19000-7f19fef1a000 rw-p 00003000 08:06 59776872                   /lib64/libdl-2.12.so
7f19fef1a000-7f19fef2f000 r-xp 00000000 08:06 59769735                   /lib64/libz.so.1.2.3
7f19fef2f000-7f19ff12e000 ---p 00015000 08:06 59769735                   /lib64/libz.so.1.2.3
7f19ff12e000-7f19ff12f000 r--p 00014000 08:06 59769735                   /lib64/libz.so.1.2.3
7f19ff12f000-7f19ff130000 rw-p 00015000 08:06 59769735                   /lib64/libz.so.1.2.3
7f19ff130000-7f19ff150000 r-xp 00000000 08:06 59769635                   /lib64/ld-2.12.so
7f19ff333000-7f19ff339000 rw-p 00000000 00:00 0 
7f19ff34d000-7f19ff34f000 rw-p 00000000 00:00 0 
7f19ff34f000-7f19ff350000 r--p 0001f000 08:06 59769635                   /lib64/ld-2.12.so
7f19ff350000-7f19ff351000 rw-p 00020000 08:06 59769635                   /lib64/ld-2.12.so
7f19ff351000-7f19ff352000 rw-p 00000000 00:00 0 
7fffbaf0d000-7fffbaf22000 rw-p 00000000 00:00 0                          [stack]
7fffbaff0000-7fffbaff1000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]


Using gdb, and doing a bt shows:


(gdb) bt
#0  0x00007f8050233635 in raise () from /lib64/libc.so.6
#1  0x00007f8050234e15 in abort () from /lib64/libc.so.6
#2  0x00007f8050271547 in __libc_message () from /lib64/libc.so.6
#3  0x00007f8050276e76 in malloc_printerr () from /lib64/libc.so.6
#4  0x00007f80502799b3 in _int_free () from /lib64/libc.so.6
#5  0x00007f80502674dd in fclose@@GLIBC_2.2.5 () from /lib64/libc.so.6
#6  0x00000000004f5918 in load_projects () at db.c:8982
#7  0x00000000004da7d4 in boot_db (fCopyOver=false) at db.c:734
#8  0x00000000004cba3f in main (argc=2, argv=0x7fff0cd53a08) at comm.c:520


the line 734 of db.c is the fclose( fp ); in this function:


void load_projects( void ) /* Copied load_boards structure for simplicity */
{
   char filename[MAX_INPUT_LENGTH];
   FILE *fp;
   PROJECT_DATA *project;

   first_project = NULL;
   last_project = NULL;
   snprintf( filename, MAX_INPUT_LENGTH, "%s", PROJECTS_FILE );
   if( !( fp = fopen( filename, "r" ) ) )
      return;

   while( ( project = read_project( fp ) ) != NULL )
      LINK( project, first_project, last_project, next, prev );

   fclose( fp );
   fp = NULL;

   return;
}


Any idea what's the error?? i've test it in a just unpacked smaugfuss1.9 stock source with the same results

Thanks
Australia Forum Administrator #1
What did you type in the client, exactly? I just tried SmaugFuss 1.9, and it seemed to work OK so far:


<24hp 145m 110mv> <#1200> 
project list
 # | Owner       | Project              | Date                     | Status
---|-------------|----------------------|--------------------------|-----------
No projects exist.

<24hp 145m 110mv> <#1200> 
project add nick
Ok.

<24hp 145m 110mv> <#1200> 
project list
 # | Owner       | Project              | Date                     | Status
---|-------------|----------------------|--------------------------|-----------
 1 | (None)      | nick                 | Tue Sep 23 07:25:26 2014 | (None)    

Amended on Mon 22 Sep 2014 08:27 PM by Nick Gammon
USA Global Moderator #2
db.c::read_project calls fclose(fp) if the project file is empty.

I would just delete that line, honestly, since you're calling fclose in load_projects right after it returns NULL. Or check for NULL before fclosing in load_projects.