diff --git a/xCAT-server/lib/xcat/plugins/copycds.pm b/xCAT-server/lib/xcat/plugins/copycds.pm index b43309648..eceedb137 100644 --- a/xCAT-server/lib/xcat/plugins/copycds.pm +++ b/xCAT-server/lib/xcat/plugins/copycds.pm @@ -100,9 +100,11 @@ sub process_request { mkdir "/mnt/xcat"; if (system("mount $mntopts '$file' /mnt/xcat")) { - $callback->({error=>"copycds was unable to mount $file to /mnt/xcat.",errorcode=>[1]}); + eval { $callback->({error=>"copycds was unable to mount $file to /mnt/xcat.",errorcode=>[1]}) }; + system("umount -l /mnt/xcat")) { return; } + eval { my $newreq = dclone($request); $newreq->{command}= [ 'copycd' ]; #Note the singular, it's different $newreq->{arg} = ["-m","/mnt/xcat"]; @@ -143,6 +145,7 @@ sub process_request { chdir($existdir); while (wait() > 0) { yield(); } #Make sure all children exit before trying umount + }; system("umount -l /mnt/xcat"); unless ($identified) { $callback->({error=>["copycds could not identify the ISO supplied, you may wish to try -n "],errorcode=>[1]});