Files
Sutou Kouhei 463682df3b GH-50302: [GLib][Ruby][FlightRPC] Fix GC related problems (#50401)
### Rationale for this change

`gaflight_server_listen()` may use options' auth handler later. So we should refer the given options while the server is alive. If we don't refer the given options, we may touch freed auth handler later.

The argument of `ArrowFlight::Criteria.new`/`ArrowFlight::Ticket.new` should be referred to protect from GC in Ruby.

I could fix some problems by `GC.stress = true` but I couldn't fix some problems that are reproduced only on GitHub Actions. I omit tests for them for now.

### What changes are included in this PR?

* Refer options for `gaflight_server_listen()`
* Refer expression for `ArrowFlight::Criteria.new`
* Refer data for `ArrowFlight::Ticket.new`
* Omit Flight related tests that I can't fix...

### Are these changes tested?

Yes.

### Are there any user-facing changes?

Yes.

* GitHub Issue: #50302

Authored-by: Sutou Kouhei <kou@clear-code.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
2026-07-09 09:38:55 +09:00

103 lines
2.5 KiB
Ruby

# -*- ruby -*-
#
# 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 "bundler/gem_helper"
require "rake/clean"
require "yard"
base_dir = File.join(__dir__)
helper = Bundler::GemHelper.new(base_dir)
helper.install
spec = helper.gemspec
release_task = Rake::Task["release"]
release_task.prerequisites.replace(["build", "release:rubygem_push"])
def run_extconf(build_dir, extension_dir, *arguments)
cd(build_dir) do
ruby(File.join(extension_dir, "extconf.rb"),
*arguments)
end
end
spec.extensions.each do |extension|
extension_dir = File.join(base_dir, File.dirname(extension))
build_dir = ENV["BUILD_DIR"]
if build_dir
build_dir = File.join(build_dir, "red-arrow")
directory build_dir
else
build_dir = extension_dir
end
CLOBBER << File.join(build_dir, "Makefile")
CLOBBER << File.join(build_dir, "mkmf.log")
makefile = File.join(build_dir, "Makefile")
file makefile => build_dir do
run_extconf(build_dir, extension_dir)
end
desc "Configure"
task :configure => build_dir do
run_extconf(build_dir, extension_dir)
end
desc "Compile"
task :compile => makefile do
cd(build_dir) do
sh("make")
end
end
task :clean do
cd(build_dir) do
sh("make", "clean") if File.exist?("Makefile")
end
end
end
desc "Run tests"
task :test do
cd(base_dir) do
args = []
args << "-v" if ENV["RUNNER_DEBUG"]
ruby("test/run-test.rb", *args)
end
end
task default: :test
desc "Run benchmarks"
task :benchmark do
benchmarks = if ENV["BENCHMARKS"]
ENV["BENCHMARKS"].split
else
FileList["benchmark/{,*/**/}*.yml"]
end
cd(base_dir) do
benchmarks.each do |benchmark|
sh("benchmark-driver", benchmark)
end
end
end
YARD::Rake::YardocTask.new do |task|
end