PROTON-781: Ruby registry and memory management testing

Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/81c5cbd1
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/81c5cbd1
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/81c5cbd1

Branch: refs/heads/PROTON-781-ruby-reactor-apis
Commit: 81c5cbd178141c959662a1c776a1df98556a90e0
Parents: 3d94612
Author: Darryl L. Pierce <mcpie...@gmail.com>
Authored: Fri May 8 10:54:13 2015 -0400
Committer: Darryl L. Pierce <mcpie...@gmail.com>
Committed: Mon Jun 8 13:57:52 2015 -0400

----------------------------------------------------------------------
 examples/ruby/registry_test.rb | 76 +++++++++++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/81c5cbd1/examples/ruby/registry_test.rb
----------------------------------------------------------------------
diff --git a/examples/ruby/registry_test.rb b/examples/ruby/registry_test.rb
new file mode 100644
index 0000000..b4b1f6c
--- /dev/null
+++ b/examples/ruby/registry_test.rb
@@ -0,0 +1,76 @@
+#--
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#++
+
+require 'qpid_proton'
+require 'weakref'
+
+def show_registry(registry)
+  registry.each_pair do |key, value|
+    registry.delete(key) if value.weakref_alive?
+  end
+  puts "The contents of the registry: size=#{registry.size}"
+end
+
+def show_object_count(clazz)
+  puts "There are #{ObjectSpace.each_object(clazz).count} instances of 
#{clazz}."
+end
+
+impl = Cproton.pn_transport
+implclazz = impl.class
+transport = Qpid::Proton::Transport.wrap(impl)
+
+puts "Initial setup:"
+show_object_count(Qpid::Proton::Transport)
+show_object_count(implclazz)
+
+transport = nil
+
+show_registry(Qpid::Proton.registry)
+
+ObjectSpace.garbage_collect
+
+puts "After garbage collection:"
+show_object_count(Qpid::Proton::Transport)
+show_object_count(implclazz)
+
+MAXCOUNT=100000
+(1..MAXCOUNT).each do |which|
+  nimpl = Cproton.pn_transport
+  Cproton.pn_incref(nimpl)
+  transport = Qpid::Proton::Transport.wrap(nimpl)
+  transport = Qpid::Proton::Transport.wrap(nimpl)
+end
+
+transport = nil
+
+puts "After creating #{MAXCOUNT} instances"
+show_object_count(Qpid::Proton::Transport)
+show_object_count(implclazz)
+show_registry(Qpid::Proton.registry)
+
+ObjectSpace.garbage_collect
+
+transport = Qpid::Proton::Transport.wrap(impl)
+
+puts "After garbage collection:"
+puts "impl=#{impl}"
+puts "transport=#{transport}"
+show_object_count(Qpid::Proton::Transport)
+show_object_count(implclazz)
+show_registry(Qpid::Proton.registry)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to