added locking around ring_buffer_user_read as suggested by axeld. locking is already around ring_buffer_write

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18399 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2006-08-05 12:33:03 +00:00
parent 38c71d13d7
commit faa8b41dac
@@ -624,7 +624,7 @@ usb_callback(void *cookie, uint32 busStatus,
} else } else
interpret_mouse_buffer(device); interpret_mouse_buffer(device);
release_sem (device->sem_lock); release_sem(device->sem_lock);
} }
/* issue next request */ /* issue next request */
@@ -870,12 +870,12 @@ hid_device_open(const char *name, uint32 flags,
if ((cookie = malloc (sizeof (driver_cookie))) == NULL) if ((cookie = malloc (sizeof (driver_cookie))) == NULL)
return B_NO_MEMORY; return B_NO_MEMORY;
acquire_sem (device->sem_lock); acquire_sem(device->sem_lock);
cookie->device = device; cookie->device = device;
cookie->next = device->open_fds; cookie->next = device->open_fds;
device->open_fds = cookie; device->open_fds = cookie;
device->open++; device->open++;
release_sem (device->sem_lock); release_sem(device->sem_lock);
*out_cookie = cookie; *out_cookie = cookie;
DPRINTF_INFO ((MY_ID "device %s open (%d)\n", name, device->open)); DPRINTF_INFO ((MY_ID "device %s open (%d)\n", name, device->open));
@@ -920,7 +920,9 @@ hid_device_control(driver_cookie *cookie, uint32 op,
err = acquire_sem_etc(device->sem_cb, 1, B_CAN_INTERRUPT, 0LL); err = acquire_sem_etc(device->sem_cb, 1, B_CAN_INTERRUPT, 0LL);
if (err != B_OK) if (err != B_OK)
return err; return err;
acquire_sem(device->sem_lock);
ring_buffer_user_read(device->rbuf, arg, sizeof(raw_key_info)); ring_buffer_user_read(device->rbuf, arg, sizeof(raw_key_info));
release_sem(device->sem_lock);
return err; return err;
break; break;
@@ -934,7 +936,9 @@ hid_device_control(driver_cookie *cookie, uint32 op,
err = acquire_sem_etc(device->sem_cb, 1, B_CAN_INTERRUPT, 0LL); err = acquire_sem_etc(device->sem_cb, 1, B_CAN_INTERRUPT, 0LL);
if (err != B_OK) if (err != B_OK)
return err; return err;
acquire_sem(device->sem_lock);
ring_buffer_user_read(device->rbuf, arg, sizeof(mouse_movement)); ring_buffer_user_read(device->rbuf, arg, sizeof(mouse_movement));
release_sem(device->sem_lock);
return err; return err;
break; break;
case MS_NUM_EVENTS: case MS_NUM_EVENTS:
@@ -964,7 +968,7 @@ hid_device_close(driver_cookie *cookie)
/* detach the cookie from list */ /* detach the cookie from list */
acquire_sem (device->sem_lock); acquire_sem(device->sem_lock);
if (device->open_fds == cookie) if (device->open_fds == cookie)
device->open_fds = cookie->next; device->open_fds = cookie->next;
else { else {
@@ -977,7 +981,7 @@ hid_device_close(driver_cookie *cookie)
} }
} }
--device->open; --device->open;
release_sem (device->sem_lock); release_sem(device->sem_lock);
return B_OK; return B_OK;
} }