# HG changeset patch # User David Scott # Date 1268741973 0 # Node ID 1f355c3b5970c8df1c5b74b0b0996cdffa4fbe7a # Parent 282bc9b84d78a67aea171d234873be6c63ddc307 CA-28958: fix a VBD create/destroy race in the VBD.device 'autodetect' choosing logic. A parallel VBD.destroy can come in and delete a VBD just before we attempt to look up the device field. Obviously it doesn't matter what device this VBD was since it has just been deleted... so just ignore it. Signed-off-by: David Scott diff -r 282bc9b84d78 -r 1f355c3b5970 ocaml/xapi/xapi_vm_helpers.ml --- a/ocaml/xapi/xapi_vm_helpers.ml Tue Mar 16 12:17:56 2010 +0000 +++ b/ocaml/xapi/xapi_vm_helpers.ml Tue Mar 16 12:19:33 2010 +0000 @@ -778,10 +778,13 @@ (** Given a VBD returns either Some devicename or None in the case where a device is set to autodetect and it hasn't been plugged in. *) let get_device_name_in_use ~__context ~self = - let vbd_r = Db.VBD.get_record ~__context ~self in - match vbd_r.API.vBD_userdevice with - | "autodetect" -> Some vbd_r.API.vBD_device - | x -> Some x + try + let vbd_r = Db.VBD.get_record ~__context ~self in + match vbd_r.API.vBD_userdevice with + | "autodetect" -> Some vbd_r.API.vBD_device + | x -> Some x + with _ -> (* someone just destroyed the VBD *) + None exception Invalid_device of string let translate_vbd_device_to_number name =