From 3424cc816ac001a83a2ccbd224ed0a207cd7e2ca Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Fri, 25 Aug 2006 13:03:22 +0000 Subject: [PATCH] Installed protection against resource leak in Cdrskin_grab_drive() --- trunk/cdrskin/cdrskin.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/trunk/cdrskin/cdrskin.c b/trunk/cdrskin/cdrskin.c index c0225e00..d614df35 100644 --- a/trunk/cdrskin/cdrskin.c +++ b/trunk/cdrskin/cdrskin.c @@ -2016,10 +2016,14 @@ int Cdrskin_grab_drive(struct CdrskiN *skin, int flag) int restore_handler= 0,ret; struct burn_drive *drive; + if(skin->drive_is_grabbed) + Cdrskin_release_drive(skin,0); + drive= skin->drives[skin->driveno].drive; skin->grabbed_drive= drive; #ifdef Cdrskin_grab_abort_brokeN + /* There seems to be no way to get a drive out of status BURN_DRIVE_GRABBING So try to block out signals if there is a signal handler installed */ if(skin->preskin->abort_handler==1 || @@ -2028,11 +2032,12 @@ int Cdrskin_grab_drive(struct CdrskiN *skin, int flag) Cleanup_set_handlers(NULL,NULL,2); restore_handler= 1; } + #endif /* Cdrskin_grab_abort_brokeN */ #ifdef Cdrskin_new_api_tesT - if(flag&1) { + if(flag&1) { fprintf(stderr, "cdrskin: experimental: Cdrskin_grab_drive() on Cdrskin_new_api_tesT\n"); @@ -2041,8 +2046,11 @@ int Cdrskin_grab_drive(struct CdrskiN *skin, int flag) goto unable; skin->driveno= 0; } else { + #else + { + #endif /* ! Cdrskin_new_api_tesT */ /* RIP-14.5 + LITE-ON 48125S produce a false status if tray was unloaded */