From 7b59f29e9e3838155f4f1c2a4079259aa9ebd3db Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Mon, 20 Jan 2014 20:47:34 -0600 Subject: [PATCH] radeon_hd: Fix crash of driver on multiple open * open_count only got raised on initial open, subsequent opens didn't increment the counter thus when they exited the driver unloaded causing app_server to crash * Thanks to hamishm for pointing out that the if checks the pre-increment number * Resolves #10452 * Add a kdl debug command to radeon_hd --- src/add-ons/kernel/drivers/graphics/radeon_hd/device.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/drivers/graphics/radeon_hd/device.cpp b/src/add-ons/kernel/drivers/graphics/radeon_hd/device.cpp index 28347e2198..41c4778b40 100644 --- a/src/add-ons/kernel/drivers/graphics/radeon_hd/device.cpp +++ b/src/add-ons/kernel/drivers/graphics/radeon_hd/device.cpp @@ -123,12 +123,15 @@ device_open(const char* name, uint32 /*flags*/, void** _cookie) mutex_lock(&gLock); - if (info->open_count == 0) { + if (info->open_count++ == 0) { // this device has been opened for the first time, so // we allocate needed resources and initialize the structure info->init_status = radeon_hd_init(*info); if (info->init_status == B_OK) { - info->open_count++; +#ifdef DEBUG_COMMANDS + add_debugger_command("radeonhd_reg", getset_register, + "dumps or sets the specified radeon_hd register"); +#endif } }