Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | Date | Fri, 28 Nov 2003 03:07:40 +0100 | From | Tonnerre Anklin <> | Subject | [I4L] Unbind slot on failure in ST_SLOT_BOUND |
| |
Salut,
If a dialup attempt fails (e.g. HiSax doesn't define ISDN_CMD_CLREAZ and thus returns -EINVAL), the slot stays in ST_SLOT_BOUND. That doesn't seem to be a great idea, because any disconnect or further connect attempts will fail. This also causes the kernel to hang on shutdown after a failed dial attempt.
More on this patch can be found at <URL:http://keepsake.keepsake.ch/~thunder/noyau/2.6.0-test11-ta1/isdn_slot_unbind.xml>
Thunder
diff -Nur linux-2.6.0-test9-mm3/drivers/isdn/i4l/isdn_common.c linux-2.6.0-test9-mm3-ta1/drivers/isdn/i4l/isdn_common.c --- linux-2.6.0-test9-mm3/drivers/isdn/i4l/isdn_common.c 2003-10-08 21:24:04.000000000 +0200 +++ linux-2.6.0-test9-mm3-ta1/drivers/isdn/i4l/isdn_common.c 2003-11-24 13:35:38.000000000 +0100 @@ -2105,7 +2105,7 @@ retval = isdn_slot_command(slot, ISDN_CMD_CLREAZ, &cmd); if (retval) - return retval; + goto out_unbind; strcpy(cmd.parm.num, msn); retval = isdn_slot_command(slot, ISDN_CMD_SETEAZ, &cmd); @@ -2114,12 +2114,12 @@ cmd.parm.fax = dial->fax; retval = isdn_slot_command(slot, ISDN_CMD_SETL2, &cmd); if (retval) - return retval; + goto out_unbind; cmd.arg = dial->l3_proto << 8; retval = isdn_slot_command(slot, ISDN_CMD_SETL3, &cmd); if (retval) - return retval; + goto out_unbind; cmd.parm.setup.si1 = dial->si1; cmd.parm.setup.si2 = dial->si2; @@ -2132,6 +2132,9 @@ dial->l2_proto, dial->l3_proto); return isdn_slot_command(slot, ISDN_CMD_DIAL, &cmd); + out_unbind: + fsm_event(&slot->fi, EV_SLOT_UNBIND, NULL); + return retval; } int[unhandled content-type:application/pgp-signature] | ![\](/images/icornerr.gif) |