Advice requested for fixing issue 17914

Steven Schveighoffer schveiguy at yahoo.com
Wed Oct 25 15:43:12 UTC 2017


On 10/25/17 11:27 AM, Nemanja Boric wrote:
> On Wednesday, 25 October 2017 at 15:22:18 UTC, Nemanja Boric wrote:
>> On Wednesday, 25 October 2017 at 15:12:27 UTC, Nemanja Boric wrote:
>>> On Wednesday, 25 October 2017 at 14:19:14 UTC, Jonathan M Davis wrote:
>>>> On Wednesday, October 25, 2017 09:26:26 Steven Schveighoffer via 
>>>> Digitalmars-d wrote:
>>>>> [...]
>>>>
>>>> Maybe there was a change in the OS(es) being used that affected the 
>>>> limit?
>>>>
>>>> - Jonathan M Davis
>>>
>>> Yes, the stack is not immediately unmapped because it's very common
>>> just to reset the fiber and reuse it for handling the new connection -
>>> creating new fibers (and doing unmap on termination) is a problem in the
>>> real life (as this is as well).
>>>
>>> At sociomantic we already had this issue: 
>>> https://github.com/sociomantic-tsunami/tangort/issues/2 Maybe this is 
>>> the way to go - I don't see a reason why every stack should be mmaped 
>>> separately.
>>
>> I'm not sure that would allow us to mprotect the page guards, though.
> 
> I think the easiest way to proceed from here is to default the stack 
> protection page to 0, so we avoid this regression. Once that's in, we 
> can think about different allocation strategy for the fiber's stacks or 
> throwing the exceptions on too many fibers (too bad mmap doesn't return 
> error code, but you get SIGABRT instead :( )

mmap does return an error. And onOutMemoryError is called when it fails.

https://github.com/dlang/druntime/blob/master/src/core/thread.d#L4518

Which should throw an error:

https://github.com/dlang/druntime/blob/144c9e6e9a3c00aba82b92da527a52190fe91c97/src/core/exception.d#L542

however, when mprotect fails, it calls abort():

https://github.com/dlang/druntime/blob/master/src/core/thread.d#L4540

> What do you think?

I think we should reverse the mprotect default, and try and determine a 
better way to opt-in to the limit.

Is this a Linux-specific problem? Are there issues with mprotect on 
other OSes? Or is Linux the only OS that supports mprotect?

-Steve


More information about the Digitalmars-d mailing list