Люди добрые, нужна помощь, в общем картина следующая, есть буфер FIFO, есть ком-порт. Задача хочу запихнуть в поток следующий процесс: читаем буфер FIFO, и если в нем что-то есть, то выкидываем в ком-порт. Проблема собственно вот в чем, когда без потока, то все отлично работает, как только поток, получаю следующиее:
*** buffer overflow detected ***: ./delta terminated ======= Backtrace: ========= /lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x50)[0xb7488df0] /lib/i386-linux-gnu/libc.so.6(+0xe4cca)[0xb7487cca] /lib/i386-linux-gnu/libc.so.6(+0xe42a9)[0xb74872a9] ./delta[0x8048e80] /lib/i386-linux-gnu/libpthread.so.0(+0x5e99)[0xb7636e99] /lib/i386-linux-gnu/libc.so.6(clone+0x5e)[0xb747373e] ======= Memory map: ======== 08048000-0804a000 r-xp 00000000 fb:00 524311 /usr/src/smas/smasclient2/delta/delta 0804a000-0804b000 r--p 00001000 fb:00 524311 /usr/src/smas/smasclient2/delta/delta 0804b000-0804c000 rw-p 00002000 fb:00 524311 /usr/src/smas/smasclient2/delta/delta 08f14000-08f35000 rw-p 00000000 00:00 0 [heap] b6b8a000-b6b8b000 ---p 00000000 00:00 0 b6b8b000-b738d000 rw-p 00000000 00:00 0 b738d000-b73a0000 r-xp 00000000 fb:00 30015724 /lib/i386-linux-gnu/libz.so.1.2.3.4 b73a0000-b73a1000 r--p 00012000 fb:00 30015724 /lib/i386-linux-gnu/libz.so.1.2.3.4 b73a1000-b73a2000 rw-p 00013000 fb:00 30015724 /lib/i386-linux-gnu/libz.so.1.2.3.4 b73a2000-b73a3000 rw-p 00000000 00:00 0 b73a3000-b74fd000 r-xp 00000000 fb:00 30015505 /lib/i386-linux-gnu/libc-2.13.so b74fd000-b74fe000 ---p 0015a000 fb:00 30015505 /lib/i386-linux-gnu/libc-2.13.so b74fe000-b7500000 r--p 0015a000 fb:00 30015505 /lib/i386-linux-gnu/libc-2.13.so b7500000-b7501000 rw-p 0015c000 fb:00 30015505 /lib/i386-linux-gnu/libc-2.13.so b7501000-b7504000 rw-p 00000000 00:00 0 b7504000-b751e000 r-xp 00000000 fb:00 30015532 /lib/i386-linux-gnu/libgcc_s.so.1 b751e000-b751f000 r--p 00019000 fb:00 30015532 /lib/i386-linux-gnu/libgcc_s.so.1 b751f000-b7520000 rw-p 0001a000 fb:00 30015532 /lib/i386-linux-gnu/libgcc_s.so.1 b7520000-b7544000 r-xp 00000000 fb:00 30015527 /lib/i386-linux-gnu/libm-2.13.so b7544000-b7545000 r--p 00023000 fb:00 30015527 /lib/i386-linux-gnu/libm-2.13.so b7545000-b7546000 rw-p 00024000 fb:00 30015527 /lib/i386-linux-gnu/libm-2.13.so b7546000-b7625000 r-xp 00000000 fb:00 28840432 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14 b7625000-b7629000 r--p 000de000 fb:00 28840432 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14 b7629000-b762a000 rw-p 000e2000 fb:00 28840432 /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14 b762a000-b7631000 rw-p 00000000 00:00 0 b7631000-b7646000 r-xp 00000000 fb:00 30015523 /lib/i386-linux-gnu/libpthread-2.13.so b7646000-b7647000 r--p 00015000 fb:00 30015523 /lib/i386-linux-gnu/libpthread-2.13.so b7647000-b7648000 rw-p 00016000 fb:00 30015523 /lib/i386-linux-gnu/libpthread-2.13.so b7648000-b764b000 rw-p 00000000 00:00 0 b764b000-b77ea000 r-xp 00000000 fb:00 28847085 /usr/lib/libmysqlclient.so.16.0.0 b77ea000-b77ed000 r--p 0019e000 fb:00 28847085 /usr/lib/libmysqlclient.so.16.0.0 b77ed000-b7832000 rw-p 001a1000 fb:00 28847085 /usr/lib/libmysqlclient.so.16.0.0 b7832000-b7833000 rw-p 00000000 00:00 0 b7833000-b783a000 r-xp 00000000 fb:00 30015507 /lib/i386-linux-gnu/librt-2.13.so b783a000-b783b000 r--p 00006000 fb:00 30015507 /lib/i386-linux-gnu/librt-2.13.so b783b000-b783c000 rw-p 00007000 fb:00 30015507 /lib/i386-linux-gnu/librt-2.13.so b783f000-b7844000 rw-p 00000000 00:00 0 b7844000-b7845000 r-xp 00000000 00:00 0 [vdso] b7845000-b7861000 r-xp 00000000 fb:00 30015528 /lib/i386-linux-gnu/ld-2.13.so b7861000-b7862000 r--p 0001b000 fb:00 30015528 /lib/i386-linux-gnu/ld-2.13.so b7862000-b7863000 rw-p 0001c000 fb:00 30015528 /lib/i386-linux-gnu/ld-2.13.so bff28000-bff49000 rw-p 00000000 00:00 0 [stack] Аварийный останов
Сам код функции потока: void * cDeltaCom::dcom(void *arg) { int q=0; FILE * f; struct termios opt; struct sDeltaCom *set=(struct sDeltaCom *)arg; cLog log(1,set->LogFile,«SMAS To Delta stack»); log.log(1,«Openning COM-Port: %s»,set->Port); int p; log.log(1,«COM-Port is opened»); umask(0); mknod(set->Fifo,S_IFIFO|0666,0); p=open(set->Port,O_RDWR | O_NOCTTY | O_NDELAY); if (p==-1) { return NULL; } fcntl(p,F_SETFL,0); tcgetattr(p,&opt); opt.c_cflag |=CS8; opt.c_cflag &=~PARENB; opt.c_cflag &=~CSTOPB; opt.c_cflag &=~CRTSCTS; opt.c_cflag |=CREAD; opt.c_cflag |=CLOCAL; opt.c_cflag |=~OPOST; cfsetispeed(&opt,B9600); cfsetospeed(&opt,B9600); tcsetattr(p,TCSAFLUSH,&opt); tcflush(p,TCIOFLUSH); while (1) { unsigned char buf[5]; int tmpnum; int objnum; char *s; char bf[128]=""; int Code=0,Message=0; char tmp[64]=""; f=fopen(set->Fifo,«r»); s=fgets(bf,128,f); bf[strlen(bf)-1]=0; s=strchr(bf,'-'); strncpy(tmp,bf,s-bf); tmp[s-bf]=0; s++; q=write (p,buf,sizeof(buf)-1); int status; ioctl(p,TIOCMGET,&status); status &=~TIOCM_DTR; ioctl(p,TIOCMSET,status); fclose(f); } close(p); }
Пожалуйста, СПАСИТЕ....