Date: Monday, August 12, 2019 @ 15:39:11
  Author: foutrelis
Revision: 499025

upgpkg: crystal 0.30.0-4

Unbreak after libevent 2.1.11 rebuild (FS#63438).

Added:
  crystal/trunk/libevent-2.1.11.patch
Modified:
  crystal/trunk/PKGBUILD

-----------------------+
 PKGBUILD              |   11 ++++++--
 libevent-2.1.11.patch |   61 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2019-08-12 13:19:15 UTC (rev 499024)
+++ PKGBUILD    2019-08-12 15:39:11 UTC (rev 499025)
@@ -3,7 +3,7 @@
 
 pkgname=crystal
 pkgver=0.30.0
-pkgrel=3
+pkgrel=4
 pkgdesc='The Crystal Programming Language'
 arch=(x86_64)
 url='https://crystal-lang.org'
@@ -15,12 +15,17 @@
             'libyaml: For YAML support'
             'gmp: For BigInt support'
             'libxml2: For XML support')
-source=(crystal-$pkgver.tar.gz::https://github.com/crystal-lang/crystal/archive/$pkgver.tar.gz)
-sha256sums=('fc884970089e382344540676a9c5aa4f369c9a0f45d1858e079b4ce26878164a')
+source=(crystal-$pkgver.tar.gz::https://github.com/crystal-lang/crystal/archive/$pkgver.tar.gz
+        libevent-2.1.11.patch)
+sha256sums=('fc884970089e382344540676a9c5aa4f369c9a0f45d1858e079b4ce26878164a'
+            '3917a15399078079b6b8d78f418f4dbc8dcfd94b8a39f7b083d6075b441a5adc')
 
 prepare() {
   cd $pkgname-$pkgver
   sed -i 's|Please install shards: https://github.com/ysbaddaden/shards|Please 
install shards: pacman -S shards|' src/compiler/crystal/command.cr
+
+  # https://github.com/crystal-lang/crystal/issues/8044
+  patch -Np1 -i ../libevent-2.1.11.patch
 }
 
 build() {

Added: libevent-2.1.11.patch
===================================================================
--- libevent-2.1.11.patch                               (rev 0)
+++ libevent-2.1.11.patch       2019-08-12 15:39:11 UTC (rev 499025)
@@ -0,0 +1,61 @@
+From 284fb1e35abce2ecbebe41b3d6a78bf757145b9b Mon Sep 17 00:00:00 2001
+From: Juan Wajnerman <jwajner...@manas.com.ar>
+Date: Thu, 8 Aug 2019 08:23:26 -0300
+Subject: [PATCH] Don't resume fibers directly from event loop callbacks (fixes
+ #8044). (#8058)
+
+This is required to enable compatibility with libevent 2.1.11, because
+a warning is now raised if a `fork` is executed from within the event loop 
(https://github.com/libevent/libevent/commit/497ef904d544ac51de43934549dbeccce8e6e8f8).
+Since most Crystal code actually runs from within the event loop (from 
libevent point of view)
+the solution is enqueue the fibers and resume them outside the call to 
`event_base_loop`.
+---
+ src/crystal/event_loop.cr | 9 +++++++--
+ src/io/evented.cr         | 4 ++--
+ 2 files changed, 9 insertions(+), 4 deletions(-)
+
+diff --git a/src/crystal/event_loop.cr b/src/crystal/event_loop.cr
+index 9d8cc2812a..a4726b16d4 100644
+--- a/src/crystal/event_loop.cr
++++ b/src/crystal/event_loop.cr
+@@ -13,12 +13,17 @@ module Crystal::EventLoop
+   end
+ 
+   private def self.loop_fiber
+-    @@loop_fiber ||= Fiber.new { @@eb.run_loop }
++    @@loop_fiber ||= Fiber.new do
++      loop do
++        @@eb.run_once
++        Crystal::Scheduler.reschedule
++      end
++    end
+   end
+ 
+   def self.create_resume_event(fiber)
+     @@eb.new_event(-1, LibEvent2::EventFlags::None, fiber) do |s, flags, data|
+-      data.as(Fiber).resume
++      Crystal::Scheduler.enqueue data.as(Fiber)
+     end
+   end
+ 
+diff --git a/src/io/evented.cr b/src/io/evented.cr
+index ae2895c571..deca61cd87 100644
+--- a/src/io/evented.cr
++++ b/src/io/evented.cr
+@@ -99,7 +99,7 @@ module IO::Evented
+     @read_timed_out = timed_out
+ 
+     if reader = @readers.try &.shift?
+-      reader.resume
++      Crystal::Scheduler.enqueue reader
+     end
+   end
+ 
+@@ -108,7 +108,7 @@ module IO::Evented
+     @write_timed_out = timed_out
+ 
+     if writer = @writers.try &.shift?
+-      writer.resume
++      Crystal::Scheduler.enqueue writer
+     end
+   end
+ 

Reply via email to