Simple "Hello World" Warp-based web server crashes on Ubuntu x86_64

Anton Dessiatov anton.dessiatov at gmail.com
Wed Mar 2 08:19:38 UTC 2016


Hello Kazu,

My original intent was to accept different kinds of traffic on the same 
port. Then I wanted to figure out what protocol is used by analyzing 
first few received bytes and if that's HTTP, pass it to Warp. So I used 
internal runSettingsConnection to continue processing after connection 
has already been established.

Current "warp-ghc-issue" repository doesn't have all the protocol 
detection machinery and all that it does is simply accepting socket and 
passing it to runSettingsConnection. At the first glance it seems fully 
legitimate, but triggers behavior described.

I have studied Warp source code to figure out what could possibly go 
wrong, but currently it just looks to me that I do almost exactly the 
same things as public Network.Wai.Handler.Warp.run function (except for 
async exceptions handling, supporting TLS and other features). I don't 
see how could I trigger an infinite loop (although I admit that 
something goes very wrong with my code and doesn't go wrong with Warp's 
run function).

Even if that's an infinite loop - why does it crash instead of just 
looping? Do you think I should create an issue at Warp's bug tracker?

Regards,
   Anton.

02.03.2016 6:59, Kazu Yamamoto (山本和彦) пишет:
> Hi,
>
>> repro: internal error: ASSERTION FAILED: file rts/Schedule.h, line 137
>>
>>      (GHC version 7.10.3 for x86_64_unknown_linux)
>>      Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
>> Aborted (core dumped)
> I can reproduce this on my 64bit Mac.
>
> But the code in https://github.com/anton-dessiatov/warp-ghc-issue is
> very starange to me. Why do you use interal APIs such as
> socketConnection runSettingsConnection? Why don't you use normal APIs
> such as runSettingsSocket?
>
> I guess your usage of the internal APIs triggers an infinite loop.
>
> --Kazu



More information about the ghc-devs mailing list