Hello
By changing simple_done in hpusbscsi, so that the state variable is not changed "too late":
static void simple_done (struct urb *u)
{
struct hpusbscsi * hpusbscsi = (struct hpusbscsi *)u->context;
DEBUG("Data transfer done\n");
if (u->status < 0) {
hpusbscsi->state = HP_STATE_ERROR;
DEBUG ("simple_done set HP_STATE_ERROR\n");
} else {
if (hpusbscsi->state != HP_STATE_FREE) { /* THIS IF ... */
hpusbscsi->state = HP_STATE_WAIT;
DEBUG ("simple_done set HP_STATE_WAIT\n");
}
}
}
I managed to make vuescan work and recognise the scaner. The program identifies
the possible resolutions and even pretends to make a preview and a scan :-)
The fact that the preview and the scan are empty is of lesser relevance.....
Also, I should not mention that I still manage to hang the driver, but given the
lack of knowledge/justification for the change that I made it makes
me quite happy.
The impression that I got from the hangs is that there are other situations when the interrupts
are not processed "in due order", or then it just my patch ....
Regards
-- Source code, list archive, and docs: http://www.mostang.com/sane/ To unsubscribe: echo unsubscribe sane-devel | mail majordomo@mostang.com
This archive was generated by hypermail 2b29 : Sun Jul 08 2001 - 14:23:38 PDT