diff -u -r1.24 btsco.c --- btsco.c 5 May 2005 21:15:30 -0000 1.24 +++ btsco.c 6 May 2005 20:50:20 -0000 @@ -460,7 +460,7 @@ uint16_t sco_handle, sco_mtu, vs; char line[100]; int last_volumes[2]; - int dr_usage, force_sco; + int dr_usage, force_sco, force_old; // sco_mode is our running mode. 0 => not connect, 1 => connected // see NOT_CONNECTED,CONNECTED :) @@ -624,6 +624,7 @@ } dr_usage = infobuf.playback_count || infobuf.capture_count; force_sco = -1; + force_old = -1; if (fork) daemon(0, 0); @@ -818,12 +819,10 @@ // mean little hack to allow for a signal-triggered reconnect // force disconnection of the channel (if connected) - if (reconnect == 1) { - if (sco_mode == CONNECTED) { - force_sco = 0; - reconnect = -1; - } else reconnect = 0; - } + if (reconnect && (sco_mode == CONNECTED)) { + force_old = force_sco; + force_sco = 0; + } else reconnect = 0; if(((!dr_usage && (force_sco != 1)) || (force_sco == 0)) && (sco_mode == CONNECTED)) { if(verbose) { @@ -844,9 +843,8 @@ // if a reconnect has been requested, force // the sco channel to be acquired again - if (reconnect == -1) { + if (reconnect) { force_sco = 1; - reconnect = 0; sleep(3); } @@ -872,6 +870,12 @@ sco_mode = CONNECTED; } } + + // restore original program status + if (reconnect) { + force_sco = force_old; + reconnect = 0; + } if (ring) { write(rd, "\r\nRING\r\n", 8);