Skip to content

Commit

Permalink
staging: speakup: fix failure handling
Browse files Browse the repository at this point in the history
fix the failure handling in kobjects and the main function so that we
release the virtual keyboard if we exit due to another failure.

Signed-off-by: William Hubbs <w.d.hubbs@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
William Hubbs authored and Greg Kroah-Hartman committed Jan 10, 2011
1 parent 7571f08 commit 7959d55
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 15 deletions.
9 changes: 6 additions & 3 deletions drivers/staging/speakup/kobjects.c
Original file line number Diff line number Diff line change
Expand Up @@ -984,8 +984,10 @@ int speakup_kobj_init(void)
* not known ahead of time.
*/
accessibility_kobj = kobject_create_and_add("accessibility", NULL);
if (!accessibility_kobj)
return -ENOMEM;
if (!accessibility_kobj) {
retval = -ENOMEM;
goto out;
}

speakup_kobj = kobject_create_and_add("speakup", accessibility_kobj);
if (!speakup_kobj) {
Expand All @@ -1002,14 +1004,15 @@ int speakup_kobj_init(void)
if (retval)
goto err_group;

return 0;
goto out;

err_group:
sysfs_remove_group(speakup_kobj, &main_attr_group);
err_speakup:
kobject_put(speakup_kobj);
err_acc:
kobject_put(accessibility_kobj);
out:
return retval;
}

Expand Down
33 changes: 21 additions & 12 deletions drivers/staging/speakup/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2253,17 +2253,17 @@ static int __init speakup_init(void)

err = speakup_add_virtual_keyboard();
if (err)
return err;
goto out;

initialize_msgs(); /* Initialize arrays for i18n. */
first_console = kzalloc(sizeof(*first_console), GFP_KERNEL);
if (!first_console)
return -ENOMEM;
err = speakup_kobj_init();
if (err) {
kfree(first_console);
return err;
if (!first_console) {
err = -ENOMEM;
goto err_cons;
}
err = speakup_kobj_init();
if (err)
goto err_kobject;

reset_default_chars();
reset_default_chartab();
Expand Down Expand Up @@ -2299,11 +2299,20 @@ static int __init speakup_init(void)

speakup_task = kthread_create(speakup_thread, NULL, "speakup");
set_user_nice(speakup_task, 10);
if (!IS_ERR(speakup_task))
wake_up_process(speakup_task);
else
return -ENOMEM;
return 0;
if (IS_ERR(speakup_task)) {
err = -ENOMEM;
goto err_kobject;
}
wake_up_process(speakup_task);
goto out;

err_kobject:
speakup_kobj_exit();
kfree(first_console);
err_cons:
speakup_remove_virtual_keyboard();
out:
return err;
}

module_init(speakup_init);
Expand Down

0 comments on commit 7959d55

Please sign in to comment.