From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <25f8de8836cc6c592e70cd662b61d0a2@hamnavoe.com> To: 9fans@9fans.net From: Richard Miller <9fans@hamnavoe.com> Date: Thu, 14 Feb 2013 19:24:06 +0000 In-Reply-To: <54c0ba490a70bb58de6700d2c4e7bd96@brasstown.quanstro.net> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: Re: [9fans] usb serial bug Topicbox-Message-UUID: 178ceb12-ead8-11e9-9d60-3106f5b1d025 I said: >> The current Plan 9 usb architecture perpetuates the confusion by >> referring to them both with one name epN.1, but you still have to open >> them both independently. Erik replied: > in that case, shouldn't these three blocks be reverted? Erik is right, I was talking through my hat. It's OK to open bulk endpoints read/write, and the kernel will do the right thing. The actual problem, which neither of us had spotted although it was staring us in the face, is this: if((ep->dir == Ein || ep->dir == Eboth) && epin == -1) epin = ep->id; if((ep->dir == Ein || ep->dir == Eboth) && epout == -1) epout = ep->id; Notice the two occurrences of Ein? The second one obviously should be Eout. It was a typo (mine, I blush to admit). My usb serial adapter uses the same ep number for input and output, so my testing didn't reveal this error. I think the same typo will account for the double-free bug which Jeff (and Lucio on 4 Feb) reported. Erik, Jeff, Lucio - please try changing the offending Ein to Eout in /sys/src/cmd/usb/serial/serial.c:721 and see if your troubles are resolved.