Lemur overflow error when using L-SHIFT + TAB

@pspeed: I ran into the bug described here again, and decided to force it in your own sim-eth-es on Github. I first did L-SHIFT+L-CTRL

    if( !inputMapper.hasMappings(F_BOOST) ) {
        // Here we give run its own function.  Note that it was also possible
        // to treat running like an axis used instead of MOVE by combining
        // keys.  For example:  
        //   map(F_BOOST, KeyInput.KEY_LSHIFT, KeyInput.KEY_W )
        // Another approach would have been to set the 'scale' of the non-run
        // mapping to 0.5 or something and simply map SHIFT+W without the
        // scaling.  That would have done two things:
        // 1) the camera code simply needs to look for MOVE and not worry
        //      about a separate 'run mode' because walking will be half-speed
        //      move anyway.
        // 2) the joystick would always be running which means the player simply
        //      runs by using full stick.
        // 
        // Instead, I've opted for a run mode toggle.  Mostly because it demonstrates
        // state mapping where as all of the other inputs so far are going to
        // be treated as analog.  That means our joystick needs a run button also.       
        inputMapper.map(F_BOOST, KeyInput.KEY_LSHIFT, KeyInput.KEY_LCONTROL);
        inputMapper.map(F_BOOST, Button.JOYSTICK_RIGHT1);
    }

But that didn’t yield the error. I then tried with the combo I have in my own game (L-SHIFT + TAB)

    if( !inputMapper.hasMappings(F_BOOST) ) {
        // Here we give run its own function.  Note that it was also possible
        // to treat running like an axis used instead of MOVE by combining
        // keys.  For example:  
        //   map(F_BOOST, KeyInput.KEY_LSHIFT, KeyInput.KEY_W )
        // Another approach would have been to set the 'scale' of the non-run
        // mapping to 0.5 or something and simply map SHIFT+W without the
        // scaling.  That would have done two things:
        // 1) the camera code simply needs to look for MOVE and not worry
        //      about a separate 'run mode' because walking will be half-speed
        //      move anyway.
        // 2) the joystick would always be running which means the player simply
        //      runs by using full stick.
        // 
        // Instead, I've opted for a run mode toggle.  Mostly because it demonstrates
        // state mapping where as all of the other inputs so far are going to
        // be treated as analog.  That means our joystick needs a run button also.       
        inputMapper.map(F_BOOST, KeyInput.KEY_LSHIFT, KeyInput.KEY_TAB);
        inputMapper.map(F_BOOST, Button.JOYSTICK_RIGHT1);
    }

And it yielded the same error:

18:33:05,744 ERROR [LegacyApplication] Uncaught exception thrown in Thread[jME3 Main,5,main]
java.lang.StackOverflowError
at java.util.HashMap.hash(HashMap.java:339) ~[?:1.8.0_152]
at java.util.HashMap.remove(HashMap.java:799) ~[?:1.8.0_152]
at java.util.HashSet.remove(HashSet.java:236) ~[?:1.8.0_152]
at com.simsilica.lemur.input.InputMapper.deactivate(InputMapper.java:423) ~[lemur-1.9.1.jar:?]
at com.simsilica.lemur.input.InputMapper$StateGroupIndex.refresh(InputMapper.java:757) ~[lemur-1.9.1.jar:?]
at com.simsilica.lemur.input.InputMapper$StateGroupIndex.refresh(InputMapper.java:764) ~[lemur-1.9.1.jar:?]
at com.simsilica.lemur.input.InputMapper$StateGroupIndex.refresh(InputMapper.java:764) ~[lemur-1.9.1.jar:?]
at com.simsilica.lemur.input.InputMapper$StateGroupIndex.refresh(InputMapper.java:764) ~[lemur-1.9.1.jar:?]
at com.simsilica.lemur.input.InputMapper$StateGroupIndex.refresh(InputMapper.java:764) ~[lemur-1.9.1.jar:?]

I haven’t been able to dig further yet, I’m struggling to get combos to work properly because of other issues :slight_smile:

As an added note, the error appears when I press L-SHIFT (either first or last in the combo), very odd.

It is weird. Also weird that it’s only some specific keys because the stack trace indicates that an infinite recursion is happening.