Package: release.debian.org Severity: normal Tags: jessie User: release.debian....@packages.debian.org Usertags: pu
Dear release team, Node-groove has a bug that is pretty annoying: a missing check in a loop causes an almost-tight loop to run as long as an encoder object is attached. More details at the upstream tracker[1]. This is not a dealbreaker on multicore machines, but it is still annoying and pretty bad in single-core machines. We think the smallness of the fix and the greatness of the improvement makes it good for a stable update. Please find attached the full diff for the proposed upload. [1] https://github.com/andrewrk/groovebasin/issues/319 -- System Information: Debian Release: stretch/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.0.0-1-amd64 (SMP w/4 CPU cores) Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)
diff --git a/debian/changelog b/debian/changelog index 1e510e0..fc1c49f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +node-groove (2.2.6-1+deb8u1) UNRELEASED; urgency=medium + + * Backport patch to fix cpu usage + + -- Felipe Sateler <fsate...@debian.org> Fri, 15 May 2015 19:05:19 -0300 + node-groove (2.2.6-1) unstable; urgency=low * Update to upstream 2.2.6 diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 0000000..fae4302 --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,2 @@ +[DEFAULT] +debian-branch = jessie diff --git a/debian/patches/0001-fix-emitting-buffer-event-too-often.patch b/debian/patches/0001-fix-emitting-buffer-event-too-often.patch new file mode 100644 index 0000000..bbc5cb6 --- /dev/null +++ b/debian/patches/0001-fix-emitting-buffer-event-too-often.patch @@ -0,0 +1,62 @@ +From: Andrew Kelley <superjo...@gmail.com> +Date: Thu, 14 May 2015 09:28:25 -0700 +Subject: fix emitting 'buffer' event too often + +no longer burns the CPU +--- + src/gn_encoder.cc | 15 +++++++++++++-- + src/gn_encoder.h | 1 + + 2 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/src/gn_encoder.cc b/src/gn_encoder.cc +index 0791292..474141f 100644 +--- a/src/gn_encoder.cc ++++ b/src/gn_encoder.cc +@@ -93,7 +93,10 @@ static void EventThreadEntry(void *arg) { + GNEncoder::EventContext *context = reinterpret_cast<GNEncoder::EventContext *>(arg); + while (groove_encoder_buffer_peek(context->encoder, 1) > 0) { + uv_mutex_lock(&context->mutex); +- uv_async_send(&context->event_async); ++ if (context->emit_buffer_ok) { ++ context->emit_buffer_ok = false; ++ uv_async_send(&context->event_async); ++ } + uv_cond_wait(&context->cond, &context->mutex); + uv_mutex_unlock(&context->mutex); + } +@@ -180,6 +183,7 @@ Handle<Value> GNEncoder::Create(const Arguments& args) { + GNEncoder *gn_encoder = node::ObjectWrap::Unwrap<GNEncoder>(instance); + EventContext *context = new EventContext; + gn_encoder->event_context = context; ++ context->emit_buffer_ok = true; + context->event_cb = Persistent<Function>::New(Local<Function>::Cast(args[0])); + context->encoder = encoder; + +@@ -372,7 +376,14 @@ Handle<Value> GNEncoder::GetBuffer(const Arguments& args) { + GrooveEncoder *encoder = gn_encoder->encoder; + + GrooveBuffer *buffer; +- switch (groove_encoder_buffer_get(encoder, &buffer, 0)) { ++ int buf_result = groove_encoder_buffer_get(encoder, &buffer, 0); ++ ++ uv_mutex_lock(&gn_encoder->event_context->mutex); ++ gn_encoder->event_context->emit_buffer_ok = true; ++ uv_cond_signal(&gn_encoder->event_context->cond); ++ uv_mutex_unlock(&gn_encoder->event_context->mutex); ++ ++ switch (buf_result) { + case GROOVE_BUFFER_YES: { + Local<Object> object = Object::New(); + +diff --git a/src/gn_encoder.h b/src/gn_encoder.h +index 063bf60..958815e 100644 +--- a/src/gn_encoder.h ++++ b/src/gn_encoder.h +@@ -19,6 +19,7 @@ class GNEncoder : public node::ObjectWrap { + uv_mutex_t mutex; + GrooveEncoder *encoder; + v8::Persistent<v8::Function> event_cb; ++ bool emit_buffer_ok; + }; + + GrooveEncoder *encoder; diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..3040e56 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +0001-fix-emitting-buffer-event-too-often.patch
_______________________________________________ Pkg-javascript-devel mailing list Pkg-javascript-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-javascript-devel