Am 06.06.2014 09:31, schrieb Darius Clark:

On Fri, 06 Jun 2014 08:34:54 +0200, Sönke Ludwig wrote:

Am 06.06.2014 02:23, schrieb Darius Clark:

Hi,

I am having a issue currently with getting segfaults when attempting to access sessions.

The current code is

class AuthenicateService{
    private SessionVar!(AuthSess, "AuthSess") authSess;
    @path("/login") @method(HTTPMethod.GET)
    void GetLogin(){
       auto auth = authSess;
       if(auth.isValid) //segfault
          redirect("/dashboard");
       render!("login.index.jade", auth);
    }
}

I do not know why it does this. In the example, there is no segfault and it points to the line thats currently commented. The other way would just adding the param for the sessions directly.

Do you have a HTTPServerSettings.sessionStore set? The strange thing
is though that there should be an assertion error message in that case,
so if this is not the reason, can you try to get full a stack trace by
running it inside GDB?

Or is AuthSess a class type and maybe still initialized to null?

When I ran gdb, I got

Program received signal SIGSEGV, Segmentation fault.
0x0000000000728b00 in services.authenicate.AuthenicateService.GetLogin() (
     this=0x7ffff7edcb80, req=0x7ffff7e8c020)
     at source/services/authenicate.d:22
22                      if(auth.isValid)

I wouldnt see why the AuthSess class would still be initialized to null. Any suggestions what I could do to fix it maybe?

Do you have a place where it is explicitly initialized? It's hard to
tell from that snippet what exactly goes on. You'd basically have to
make sure it is initialized for every request, because you never know if
that request already has an associated session. But this just gave me
the idea to extend SessionVar with an optional initializer delegate in
addition to a constant initializer value. Then the following would
always guarantee a valid AuthSess instance:

SessionVar!(AuthSess, "AuthSess") authSess = { return new AuthSess; };