This bug was introduced in swig-3.0.8 in #146252 adding shared_ptr support. An ObjectPreviouslyDeleted error was incorrectly thrown when the pointer was used as a parameter after being set to zero via a call to 'DATA_PTR(self) = 0'. It isn't clear to me which approach is better in this corner case, so I've gone for backwards compatibility and restored the old behaviour. Closes #602
49 lines
1.1 KiB
Ruby
49 lines
1.1 KiB
Ruby
#!/usr/bin/env ruby
|
|
#
|
|
# The Subversion bindings use this manually written proxy class approach
|
|
# to the Ruby bindings. Note that in C the struct svn_fs_t is an
|
|
# opaque pointer and the Ruby FileSystem proxy class is hand written around it.
|
|
# This testcase tests this and the C close function and subsequent error
|
|
# handling.
|
|
|
|
require 'swig_assert'
|
|
require 'ruby_manual_proxy'
|
|
|
|
module Svn
|
|
module Fs
|
|
module_function
|
|
def create(path)
|
|
f = Ruby_manual_proxy::svn_fs_create(path)
|
|
return f
|
|
end
|
|
|
|
FileSystem = SWIG::TYPE_p_svn_fs_t
|
|
class FileSystem
|
|
class << self
|
|
def create(*args)
|
|
Fs.create(*args)
|
|
end
|
|
end
|
|
def path
|
|
Ruby_manual_proxy::svn_fs_path(self)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
f = Svn::Fs::FileSystem.create("/tmp/myfile")
|
|
path = f.path
|
|
f.close
|
|
begin
|
|
# regression in swig-3.0.8 meant ObjectPreviouslyDeleted error was thrown instead
|
|
path = f.path
|
|
raise RuntimeError.new("IOError (1) not thrown")
|
|
rescue IOError
|
|
end
|
|
|
|
file = nil
|
|
begin
|
|
path = Ruby_manual_proxy::svn_fs_path(file)
|
|
raise RuntimeError.new("IOError (2) not thrown")
|
|
rescue IOError
|
|
end
|