This is just a random stab in the dark, but my guess is that std.signals hasn't been updated since the changes that make global vars live in TLS.

Try

__gshared SignalForwarder sigWinchSignal;
__gshared SignalForwarder sigAlrmSignal;


On 21/11/2010 08:05, Peter Federighi wrote:
So, I've been trying to come up with an nice way of dealing with POSIX/Linux
signals when I discovered std.signals.  It looked cool, and while it doesn't
provide exactly what I want to do (since I have to use global functions in
order to use sigaction), it's nice enough.  So here's a simplified form of
what I'm trying to do (it doesn't actually do anything).  It compiles fine,
but segfaults on the connect call.

Any ideas?
Thank you,
- Peter

import std.signals;
import std.stdio;

class SignalForwarder
     {
     mixin Signal!(int);
     }

SignalForwarder sigWinchSignal; // Window size change signal
SignalForwarder sigAlrmSignal;  // Timer alarm signal

void main()
     {
     SigWinchHandler winch;
     SigAlrmHandler alrm;

     // put sigaction code here

     sigWinchSignal.connect(&winch.handler);
     sigAlrmSignal.connect(&alrm.handler);

     // do something here
     }

// the functions that get called via sigaction
void sigWinch(int signal)
     {
     sigWinchSignal.emit(signal);
     }

void sigAlrm(int signal)
     {
     sigAlrmSignal.emit(signal);
     }

// perhaps one of many functions I want called when a signal is raised
class SigWinchHandler
     {
     void handler(int signal)
        {
        writeln("WINCH");
        }
     }

class SigAlrmHandler
     {
     void handler(int signal)
        {
        writeln("ALRM");
        }
     }


--
My enormous talent is exceeded only by my outrageous laziness.
http://www.ssTk.co.uk

Reply via email to