Mercurial > ecos
changeset 2157:1674688917d0
Fix locking between read/write operations and DSRs
| author | bartv |
|---|---|
| date | Fri, 10 Mar 2006 20:49:54 +0000 |
| parents | 1cde7dd73fff |
| children | b2eee5fc1db7 |
| files | packages/io/usb/slave/current/ChangeLog packages/io/usb/slave/current/src/usbs.c |
| diffstat | 2 files changed, 9 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/io/usb/slave/current/ChangeLog +++ b/packages/io/usb/slave/current/ChangeLog @@ -1,3 +1,8 @@ +2006-03-10 Bart Veer <bartv@ecoscentric.com> + + * src/usbs.c (usbs_devtab_cwrite, usbs_devtab_cwrite): add + DSR locking + 2005-06-26 Bart Veer <bartv@ecoscentric.com> * host/usbhost.c, host/configure.in: cope with incompatible
--- a/packages/io/usb/slave/current/src/usbs.c +++ b/packages/io/usb/slave/current/src/usbs.c @@ -111,9 +111,11 @@ usbs_devtab_cwrite(cyg_io_handle_t handl (*endpoint->start_tx_fn)(endpoint); cyg_drv_mutex_lock(&wait.lock); + cyg_drv_dsr_lock(); while (!wait.completed) { cyg_drv_cond_wait(&wait.signal); } + cyg_drv_dsr_unlock(); cyg_drv_mutex_unlock(&wait.lock); if (wait.result < 0) { result = wait.result; @@ -155,9 +157,11 @@ usbs_devtab_cread(cyg_io_handle_t handle endpoint->complete_data = (void*) &wait; (*endpoint->start_rx_fn)(endpoint); cyg_drv_mutex_lock(&wait.lock); + cyg_drv_dsr_lock(); while (!wait.completed) { cyg_drv_cond_wait(&wait.signal); } + cyg_drv_dsr_unlock(); cyg_drv_mutex_unlock(&wait.lock); if (wait.result < 0) { result = wait.result;
