Fixed removing from device list with only one device info present
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23488 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -55,15 +55,14 @@ void remove_device_info (my_device_info *my_dev)
|
|||||||
{
|
{
|
||||||
assert (my_dev != NULL);
|
assert (my_dev != NULL);
|
||||||
acquire_sem (my_device_list_lock);
|
acquire_sem (my_device_list_lock);
|
||||||
if (my_device_list == my_dev)
|
if (my_device_list == my_dev) {
|
||||||
my_device_list = my_dev->next;
|
my_device_list = my_dev->next;
|
||||||
else
|
--my_device_count;
|
||||||
{
|
my_device_list_changed = true;
|
||||||
|
} else {
|
||||||
my_device_info *d;
|
my_device_info *d;
|
||||||
for (d = my_device_list; d != NULL; d = d->next)
|
for (d = my_device_list; d != NULL; d = d->next) {
|
||||||
{
|
if (d->next == my_dev) {
|
||||||
if (d->next == my_dev)
|
|
||||||
{
|
|
||||||
d->next = my_dev->next;
|
d->next = my_dev->next;
|
||||||
--my_device_count;
|
--my_device_count;
|
||||||
my_device_list_changed = true;
|
my_device_list_changed = true;
|
||||||
@@ -80,8 +79,7 @@ my_device_info *search_device_info (const char* name)
|
|||||||
my_device_info *my_dev;
|
my_device_info *my_dev;
|
||||||
|
|
||||||
acquire_sem (my_device_list_lock);
|
acquire_sem (my_device_list_lock);
|
||||||
for (my_dev = my_device_list; my_dev != NULL; my_dev = my_dev->next)
|
for (my_dev = my_device_list; my_dev != NULL; my_dev = my_dev->next) {
|
||||||
{
|
|
||||||
if (strcmp(my_dev->name, name) == 0)
|
if (strcmp(my_dev->name, name) == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -104,8 +102,7 @@ void alloc_device_names (void)
|
|||||||
|
|
||||||
void free_device_names (void)
|
void free_device_names (void)
|
||||||
{
|
{
|
||||||
if (my_device_names != NULL)
|
if (my_device_names != NULL) {
|
||||||
{
|
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; my_device_names [i] != NULL; i++)
|
for (i = 0; my_device_names [i] != NULL; i++)
|
||||||
free (my_device_names [i]);
|
free (my_device_names [i]);
|
||||||
@@ -121,8 +118,7 @@ void rebuild_device_names (void)
|
|||||||
|
|
||||||
assert (my_device_names != NULL);
|
assert (my_device_names != NULL);
|
||||||
acquire_sem (my_device_list_lock);
|
acquire_sem (my_device_list_lock);
|
||||||
for (i = 0, my_dev = my_device_list; my_dev != NULL; my_dev = my_dev->next)
|
for (i = 0, my_dev = my_device_list; my_dev != NULL; my_dev = my_dev->next) {
|
||||||
{
|
|
||||||
my_device_names [i++] = strdup(my_dev->name);
|
my_device_names [i++] = strdup(my_dev->name);
|
||||||
DPRINTF_INFO ((MY_ID "publishing %s\n", my_dev->name));
|
DPRINTF_INFO ((MY_ID "publishing %s\n", my_dev->name));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -540,9 +540,9 @@ uninit_driver (void)
|
|||||||
DPRINTF_INFO ((MY_ID "uninit_driver()\n"));
|
DPRINTF_INFO ((MY_ID "uninit_driver()\n"));
|
||||||
usb->uninstall_notify (usb_midi_driver_name);
|
usb->uninstall_notify (usb_midi_driver_name);
|
||||||
|
|
||||||
delete_sem (my_device_list_lock);
|
delete_sem(my_device_list_lock);
|
||||||
put_module (B_USB_MODULE_NAME);
|
put_module(B_USB_MODULE_NAME);
|
||||||
free_device_names ();
|
free_device_names();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user