swig/Examples/test-suite/ruby/ruby_manual_proxy_runme.rb
William S Fulton 763827c2e1 Ruby opaque pointer handling regression fix
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
2016-05-24 19:09:17 +01:00

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