* [ANN] dtas 0.18.0 - duct tape audio suite for *nix
@ 2020-02-03 8:36 7% Eric Wong
0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2020-02-03 8:36 UTC (permalink / raw)
To: dtas-all
Free Software command-line tools for audio playback, mastering, and
whatever else related to audio. dtas follows the worse-is-better
philosophy and acts as duct tape to combine existing command-line tools
for flexibility and ease-of-development. dtas is currently implemented
in Ruby (and some embedded shell), but may use other languages in the
future.
Changes:
dtas 0.18.0
fiddle is now supported for Linux users without a C compiler or
Ruby headers installed to take advantage of inotify(7)
functionality and efficiency improvements with splice(2) and
eventfd(7).
For non-RubyGems users, there's some setup.rb fixes thanks
to James Rowe.
Eric Wong (8):
doc: fixup leftover ftp://lists.gnu.org links
pipe: avoid loading sleepy_penguin
provide fiddle-based eventfd implementation
buffer: replace sleepy_penguin with fiddle
watchable: use fiddle for inotify support
doc: remove most recommendations for sleepy_penguin
INSTALL: s/bogomips.org/yhbt.net/
doc: update copyrights for 2020
James Rowe (2):
setup: update to use RbConfig
setup: fix duplicate variable warning
* homepage: https://80x24.org/dtas.git/about
* https://80x24.org/dtas/INSTALL
* https://80x24.org/dtas/dtas-player.txt
* https://80x24.org/dtas/NEWS.atom
* git clone https://80x24.org/dtas.git
* dtas-all@nongnu.org (plain-text only, no HTML mail, please)
* mail archives: https://80x24.org/dtas-all/
nntp://news.public-inbox.org/inbox.comp.audio.dtas
https://80x24.org/dtas-all/new.atom
^ permalink raw reply [relevance 7%]
* [PATCH v2 2/5] provide fiddle-based eventfd implementation
2019-12-20 1:39 6% [PATCH v2 0/5] support fiddle for Linux-only syscalls Eric Wong
@ 2019-12-20 1:39 5% ` Eric Wong
0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2019-12-20 1:39 UTC (permalink / raw)
To: dtas-all
sleepy_penguin requires a compiler and development headers to
install, so it could be a PITA to install for users on
distro-provided Ruby. Allow fiddle since it's part of the Ruby
standard library since 1.9.2 and users won't have to install
anything else.
---
lib/dtas.rb | 8 +++++++
lib/dtas/sigevent.rb | 7 ++++--
lib/dtas/sigevent/efd.rb | 2 ++
lib/dtas/sigevent/fiddle_efd.rb | 38 +++++++++++++++++++++++++++++++++
lib/dtas/sigevent/pipe.rb | 2 +-
test/test_sigevent.rb | 20 +++++++++++++++++
6 files changed, 74 insertions(+), 3 deletions(-)
create mode 100644 lib/dtas/sigevent/fiddle_efd.rb
create mode 100644 test/test_sigevent.rb
diff --git a/lib/dtas.rb b/lib/dtas.rb
index 7e9c0d5..ae2f815 100644
--- a/lib/dtas.rb
+++ b/lib/dtas.rb
@@ -25,6 +25,14 @@ def self.null # :nodoc:
@null ||= File.open('/dev/null', 'r+')
end
+ @libc = nil
+ def self.libc
+ @libc ||= begin
+ require 'fiddle'
+ Fiddle.dlopen(nil)
+ end
+ end
+
# String#-@ will deduplicate strings when Ruby 2.5 is released (Dec 2017)
# https://bugs.ruby-lang.org/issues/13077
if RUBY_VERSION.to_f >= 2.5
diff --git a/lib/dtas/sigevent.rb b/lib/dtas/sigevent.rb
index d4a96d7..74d22df 100644
--- a/lib/dtas/sigevent.rb
+++ b/lib/dtas/sigevent.rb
@@ -3,8 +3,11 @@
# frozen_string_literal: true
begin
raise LoadError, "no eventfd with _DTAS_POSIX" if ENV["_DTAS_POSIX"]
- require 'sleepy_penguin'
- require_relative 'sigevent/efd'
+ begin
+ require_relative 'sigevent/efd'
+ rescue LoadError
+ require_relative 'sigevent/fiddle_efd'
+ end
rescue LoadError
require_relative 'sigevent/pipe'
end
diff --git a/lib/dtas/sigevent/efd.rb b/lib/dtas/sigevent/efd.rb
index 4be2c84..22772ee 100644
--- a/lib/dtas/sigevent/efd.rb
+++ b/lib/dtas/sigevent/efd.rb
@@ -3,6 +3,8 @@
# used in various places for safe wakeups from IO.select via signals
# This requires a modern Linux system and the "sleepy_penguin" RubyGem
+require 'sleepy_penguin'
+
class DTAS::Sigevent < SleepyPenguin::EventFD # :nodoc:
def self.new
super(0, :CLOEXEC)
diff --git a/lib/dtas/sigevent/fiddle_efd.rb b/lib/dtas/sigevent/fiddle_efd.rb
new file mode 100644
index 0000000..e29f6ca
--- /dev/null
+++ b/lib/dtas/sigevent/fiddle_efd.rb
@@ -0,0 +1,38 @@
+# Copyright (C) 2013-2019 all contributors <dtas-all@nongnu.org>
+# License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
+# frozen_string_literal: true
+
+# used in various places for safe wakeups from IO.select via signals
+# This requires a modern GNU/Linux system with eventfd(2) support
+require_relative '../nonblock'
+require 'fiddle'
+class DTAS::Sigevent # :nodoc:
+
+ EventFD = Fiddle::Function.new(DTAS.libc['eventfd'],
+ [ Fiddle::TYPE_INT, Fiddle::TYPE_INT ], # initval, flags
+ Fiddle::TYPE_INT) # fd
+
+ attr_reader :to_io
+ ONE = [ 1 ].pack('Q').freeze
+
+ def initialize
+ fd = EventFD.call(0, 02000000|00004000) # EFD_CLOEXEC|EFD_NONBLOCK
+ raise "eventfd failed: #{Fiddle.last_error}" if fd < 0
+ @to_io = DTAS::Nonblock.for_fd(fd)
+ @buf = ''.b
+ end
+
+ def signal
+ @to_io.syswrite(ONE)
+ end
+
+ def readable_iter
+ @to_io.read_nonblock(8, @buf, exception: false)
+ yield self, nil # calls DTAS::Process.reaper
+ :wait_readable
+ end
+
+ def close
+ @to_io.close
+ end
+end
diff --git a/lib/dtas/sigevent/pipe.rb b/lib/dtas/sigevent/pipe.rb
index 921a5b3..0ea9d31 100644
--- a/lib/dtas/sigevent/pipe.rb
+++ b/lib/dtas/sigevent/pipe.rb
@@ -3,7 +3,7 @@
# frozen_string_literal: true
# used in various places for safe wakeups from IO.select via signals
-# A fallback for non-Linux systems lacking the "sleepy_penguin" RubyGem
+# A fallback for non-Linux systems lacking the "splice" syscall
require_relative '../nonblock'
class DTAS::Sigevent # :nodoc:
attr_reader :to_io
diff --git a/test/test_sigevent.rb b/test/test_sigevent.rb
new file mode 100644
index 0000000..6cfe528
--- /dev/null
+++ b/test/test_sigevent.rb
@@ -0,0 +1,20 @@
+# Copyright (C) 2019 all contributors <dtas-all@nongnu.org>
+# License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
+# frozen_string_literal: true
+require_relative 'helper'
+require 'dtas'
+require 'dtas/sigevent'
+
+class TestSigevent < Testcase
+ def test_sigevent
+ io = DTAS::Sigevent.new
+ io.signal
+ assert IO.select([io]), 'IO.select returns'
+ res = io.readable_iter do |f,arg|
+ assert_same io, f
+ assert_nil arg
+ end
+ assert_equal :wait_readable, res
+ assert_nil io.close
+ end
+end
^ permalink raw reply related [relevance 5%]
* [PATCH v2 0/5] support fiddle for Linux-only syscalls
@ 2019-12-20 1:39 6% Eric Wong
2019-12-20 1:39 5% ` [PATCH v2 2/5] provide fiddle-based eventfd implementation Eric Wong
0 siblings, 1 reply; 3+ results
From: Eric Wong @ 2019-12-20 1:39 UTC (permalink / raw)
To: dtas-all
fiddle can be used as an alternative to sleepy_penguin, since
sleepy_penguin requires development headers and a compiler to
install, and fiddle is bundled as part of Ruby. sleepy_penguin
can still be faster, though, so we continue supporting
sleepy_penguin.
Eric Wong (5):
pipe: avoid loading sleepy_penguin
provide fiddle-based eventfd implementation
buffer: replace sleepy_penguin with fiddle
watchable: use fiddle for inotify support
doc: remove most recommendations for sleepy_penguin
Documentation/dtas-sinkedit.pod | 2 +-
Documentation/dtas-sourceedit.pod | 2 +-
INSTALL | 16 +--
lib/dtas.rb | 8 ++
lib/dtas/buffer.rb | 15 ++-
lib/dtas/buffer/fiddle_splice.rb | 216 ++++++++++++++++++++++++++++++
lib/dtas/buffer/read_write.rb | 4 +-
lib/dtas/buffer/splice.rb | 2 +
lib/dtas/pipe.rb | 20 +--
lib/dtas/sigevent.rb | 7 +-
lib/dtas/sigevent/efd.rb | 2 +
lib/dtas/sigevent/fiddle_efd.rb | 38 ++++++
lib/dtas/sigevent/pipe.rb | 2 +-
lib/dtas/watchable.rb | 115 ++++++++--------
lib/dtas/watchable/fiddle_ino.rb | 78 +++++++++++
lib/dtas/watchable/inotify.rb | 13 ++
test/test_buffer.rb | 10 +-
test/test_sigevent.rb | 20 +++
test/test_sink_pipe_size.rb | 27 ++--
19 files changed, 486 insertions(+), 111 deletions(-)
create mode 100644 lib/dtas/buffer/fiddle_splice.rb
create mode 100644 lib/dtas/sigevent/fiddle_efd.rb
create mode 100644 lib/dtas/watchable/fiddle_ino.rb
create mode 100644 lib/dtas/watchable/inotify.rb
create mode 100644 test/test_sigevent.rb
^ permalink raw reply [relevance 6%]
Results 1-3 of 3 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2019-12-20 1:39 6% [PATCH v2 0/5] support fiddle for Linux-only syscalls Eric Wong
2019-12-20 1:39 5% ` [PATCH v2 2/5] provide fiddle-based eventfd implementation Eric Wong
2020-02-03 8:36 7% [ANN] dtas 0.18.0 - duct tape audio suite for *nix Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/dtas.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).