z7z8th <ybzhao1...@gmail.com> schrieb:
>Package: libopenobex1 >Version: 1.5-2 >Severity: important >Tags: patch > >Dear Maintainer, > * What led up to the situation? > Actually, I don't exactly know how could it be a Seg Fault. > I try to send a file through CSR BT(2.1 EDR) to bcm4329(the chip > used on the evb of my company, running android 2.2). On Debian, > I use blueman when sending file, blueman uses obex-data-server > which loads libopenobex.so. > * What exactly did you do (or not do) that was effective (or > ineffective)? > open blueman, pair with bcm4329, send a file to bcm4329. > * What was the outcome of this action? > obex-data-server segfault in libopenobex.so. > this bug is 100% reproduceable with the evb of my company, but > didn't occur when transfer file to HTC One S. Maybe it's caused > by bluetooth speed. > * What outcome did you expect instead? > transfer file successfully. > > > When I got seg fault, I tried to debug this. > download the source, > enable debug when run ./configure, > change OBEX_DEBUG in config.h to 100 to print more debug message, > make && make install, > run `obex-data-server -d -n' in terminal and test with blueman, > And I got the output below: > | Used MTUs: RX=32767, TX=32767 > | obex_data_request():215: len = 7 bytes > | do_write():380: sending 7 bytes > | ##DEBUG: OBEX event: PROGRESS(0x0), CONNECT(0x0), (null)(0x0) > | io callback > | obex_data_indication():285: Got 9 bytes msg len=12 > | obex_parse_connect_header():94: version=10 >| obex_parse_connect_header():102: requested MTU=fffe, used >MTU=7fff > | ##DEBUG: OBEX event: REQDONE(0x3), CONNECT(0x0), SUCCESS(0x20) > | obex_request_done: command 0, response 32 (OK, Success) > | Version: 0x10. Flags: 0x00 OBEX packet length: 65534 > | session_connect_result_cb > | LOCK ods_session_send_file_ext > | ##DEBUG: OBEX event: STREAMEMPTY(0x8), CONNECT(0x0), (null)(0x0) > | obex_writestream > | writestream from File: 13 > | ##DEBUG: OBEX event: STREAMEMPTY(0x8), CONNECT(0x0), (null)(0x0) > | obex_writestream > | writestream from File: 13 > | obex_data_request():215: len = 32767 bytes > | do_write():380: sending 32767 bytes > | ##DEBUG: OBEX event: PROGRESS(0x0), PUT(0x2), (null)(0x0) > | **Warning: PROGRESS: 65134 > | UNLOCK ods_session_send_file_ext > | io callback > | obex_data_indication():285: Got 5 bytes msg len=8 > | ##DEBUG: OBEX event: STREAMEMPTY(0x8), CONNECT(0x0), (null)(0x0) > | obex_writestream > | writestream from File: 13 > | obex_data_request():215: len = 32767 bytes > | do_write():380: sending 32767 bytes > | do_write():380: sending 8575 bytes > | ##DEBUG: OBEX event: LINKERR(0x4), PUT(0x2), (null)(0x0) > | **Warning: EV_LINKERR > | EV_ABORT > | > | Program received signal SIGSEGV, Segmentation fault. > | obex_client (self=self@entry=0x644550, >msg=msg@entry=0x6457c0, final=<optimized out>) at obex_client.c:178 > | 178 self->object->continue_received = 0; > | (gdb) bt > | #0 obex_client (self=self@entry=0x644550, >msg=msg@entry=0x6457c0, final=<optimized out>) at obex_client.c:178 > | #1 0x00007ffff6225fdc in obex_data_indication >(self=self@entry=0x644550, buf=<optimized out>, buf@entry=0x0, >buflen=<optimized out>, buflen@entry=0) > | at obex_main.c:314 > | #2 0x00007ffff622916b in obex_transport_handle_input >(self=0x644550, timeout=timeout@entry=1) at obex_transport.c:114 > | #3 0x00007ffff62246ac in OBEX_HandleInput >(self=<optimized out>, timeout=timeout@entry=1) at obex.c:467 > | #4 0x0000000000419713 in obex_io_callback >(io_channel=<optimized out>, cond=<optimized out>, data=<optimized >out>) at src/ods-session.c:225 > | #5 0x00007ffff78de355 in g_main_dispatch >(context=0x6368e0) at >/build/glib2.0-7fLB_j/glib2.0-2.33.12+really2.32.4/./glib/gmain.c:2539 > | #6 g_main_context_dispatch >(context=context@entry=0x6368e0) at >/build/glib2.0-7fLB_j/glib2.0-2.33.12+really2.32.4/./glib/gmain.c:3075 > | #7 0x00007ffff78de688 in g_main_context_iterate >(context=0x6368e0, block=block@entry=1, dispatch=dispatch@entry=1, > | self=<error reading variable: Unhandled dwarf >expression opcode 0xfa>) at >/build/glib2.0-7fLB_j/glib2.0-2.33.12+really2.32.4/./glib/gmain.c:3146 > | #8 0x00007ffff78dea82 in g_main_loop_run (loop=0x63d420) >at >/build/glib2.0-7fLB_j/glib2.0-2.33.12+really2.32.4/./glib/gmain.c:3340 > | #9 0x0000000000407038 in main (argc=1, >argv=0x7fffffffe0e8) at src/ods-main.c:195 > | (gdb) quit > | A debugging session is active. > | > | Inferior 1 [process 31292] will be killed. > > > > The error occurs in do_write, so I added more log messages in > do_write, finally I found the error was caused by: didn't try again > when got EAGAIN from send(). > This is the patch to fix this bug. > > --- libopenobex-1.5/lib/obex_transport.c 2009-02-09 >02:30:23.000000000 +0800 > +++ libopenobex-1.5-fix/lib/obex_transport.c 2013-02-04 >15:26:15.532023926 +0800 > @@ -45,6 +45,7 @@ > #include <string.h> > #include <unistd.h> > #include <stdio.h> > +#include <errno.h> > > #if defined(_WIN32) > #include <io.h> > @@ -379,8 +380,12 @@ > DEBUG(1, "sending %d bytes\n", size); > > actual = write_func(fd, msg->data, size); > - if (actual <= 0) > - return actual; > + if (actual <= 0) { > + if(errno == EAGAIN) > + actual = 0; > + else > + return actual; > + } > > /* Hide sent data */ > buf_remove_begin(msg, actual); > > > After doing the above fix, the seg fault disappeared, I can transfer > a picture(size is 2.8MB) from CSR bt to bcm4329, the picture can be > displayed correctly in the evb running android. > > But, I didn't quite know why didn't check EAGAIN will lead to a seg > fault. Maybe there's another bug there. > > > >-- System Information: >Debian Release: 7.0 > APT prefers testing > APT policy: (990, 'testing'), (500, 'testing-updates'), (500, >'testing-proposed-updates'), (500, 'stable-updates'), (500, >'proposed-updates'), (500, 'stable'), (400, 'unstable'), (1, >'experimental') >Architecture: amd64 (x86_64) >Foreign Architectures: i386 > >Kernel: Linux 3.2.0-4-amd64 (SMP w/2 CPU cores) >Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) >Shell: /bin/sh linked to /bin/dash > >Versions of packages libopenobex1 depends on: >ii libc6 2.13-37 >ii libusb-0.1-4 2:0.1.12-20+nmu1 > >libopenobex1 recommends no packages. > >libopenobex1 suggests no packages. > >-- no debconf information Hi, the version in Debian is rather old and latest upstream (with me as maintainer) contains different code. I can try to test your software setup but maybe you also can? Use the latest git from gitorious.org to try. I didn't get around to release version 1.7, yet, but once done, I will also package it for Debian. This will not be part of Wheezy, though. Regards, HS -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org