34 lines
757 B
Ruby
34 lines
757 B
Ruby
module Whisper
|
|
module LogSettable
|
|
private
|
|
|
|
def start_log_callback_thread
|
|
return if @log_callback_thread&.alive?
|
|
|
|
@log_callback_thread = Thread.new {
|
|
begin
|
|
while logs = drain_logs
|
|
begin
|
|
callback, user_data = synchronize {[@log_callback, @log_callback_user_data]}
|
|
next if callback.nil?
|
|
|
|
logs.each do |(level, text)|
|
|
callback.call level, text, user_data
|
|
end
|
|
rescue => err
|
|
$stderr.puts err
|
|
end
|
|
end
|
|
rescue => err
|
|
$stderr.puts err
|
|
end
|
|
}
|
|
end
|
|
|
|
def synchronize(&block)
|
|
@mutex ||= Thread::Mutex.new
|
|
@mutex.synchronize &block
|
|
end
|
|
end
|
|
end
|