Author: mmlr Date: 2011-06-13 19:54:59 +0200 (Mon, 13 Jun 2011) New Revision: 42151 Changeset: https://dev.haiku-os.org/changeset/42151 Modified: haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/SerialDevice.cpp Log: * When determining the bit to be set for RTS/DTR there was a missing comparison to op which would've caused a wrong line state to be set. * Add some more allocation checks. * Some cleanup. Modified: haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/SerialDevice.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/SerialDevice.cpp 2011-06-13 17:35:37 UTC (rev 42150) +++ haiku/trunk/src/add-ons/kernel/drivers/ports/usb_serial/SerialDevice.cpp 2011-06-13 17:54:59 UTC (rev 42151) @@ -54,12 +54,12 @@ { Removed(); - if (fDoneRead >= B_OK) + if (fDoneRead >= 0) delete_sem(fDoneRead); - if (fDoneWrite >= B_OK) + if (fDoneWrite >= 0) delete_sem(fDoneWrite); - if (fBufferArea >= B_OK) + if (fBufferArea >= 0) delete_area(fBufferArea); } @@ -68,13 +68,20 @@ SerialDevice::Init() { fDoneRead = create_sem(0, "usb_serial:done_read"); + if (fDoneRead < 0) + return fDoneRead; + fDoneWrite = create_sem(0, "usb_serial:done_write"); + if (fDoneWrite < 0) + return fDoneWrite; size_t totalBuffers = fReadBufferSize + fOutputBufferSize + fWriteBufferSize + fInterruptBufferSize; fBufferArea = create_area("usb_serial:buffers_area", (void **)&fReadBuffer, B_ANY_KERNEL_ADDRESS, ROUNDUP(totalBuffers, B_PAGE_SIZE), B_CONTIGUOUS, B_READ_AREA | B_WRITE_AREA); + if (fBufferArea < 0) + return fBufferArea; fOutputBuffer = fReadBuffer + fReadBufferSize; fWriteBuffer = fOutputBuffer + fOutputBufferSize; @@ -230,7 +237,7 @@ case TTYSETRTS: { bool set = *(bool *)buffer; - uint8 bit = TTYSETDTR ? USB_CDC_CONTROL_SIGNAL_STATE_DTR + uint8 bit = op == TTYSETDTR ? USB_CDC_CONTROL_SIGNAL_STATE_DTR : USB_CDC_CONTROL_SIGNAL_STATE_RTS; if (set) fControlOut |= bit;