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