Hi,

we had a strange bug in yast-storage with the Ruby code for
adding new LVM logical volumes (also see bng #834330).

In ep-lvm-lib.rb the function "EpCreateLogicalVolume" has a local
variable "data".  That variable is passed by reference to
"DlgCreateLogicalVolume" in ep-lvm-dialogs.rb along with a
reference to the function "Commit". Commit use "data". So the
code looks roughly like this:

def EpCreateLogicalVolume(device)

  data = { ... }

  _Commit = lambda do
    do something with data
  end

  data_ref = arg_ref(data);
  DlgCreateLogicalVolume(data_ref, fun_ref(_Commit, "symbol ()"))
  data = data_ref.value;

end

def DlgCreateLogicalVolume(data, _Commit)
  
  modify data

  _Commit.call

end

The problem is that "data" when used in "Commit" has wrong
values; it's neither the original value set in
"EpCreateLogicalVolume" nor the value set in
"DlgCreateLogicalVolume" but some mixture.

It's caused by the fact that "data = data_ref.value" happens
after calling "Commit".

We fixed this by passing "data" to "Commit" explicitely.

ciao Arvin

-- 
To unsubscribe, e-mail: [email protected]
To contact the owner, e-mail: [email protected]

Reply via email to