Stéphane,
I've tried your reproducer and it works fine with gatling 2.2.1 (with the denvazh/gatling:2.2.1 docker image). With 2.2.2 (with the denvazh/gatling:2.2.2 docker image) it goes mad and outputs that:
gatling_1 | attr1=1 attr2=1
gatling_1 | Loop Done
gatling_1 | Loop Done
.... (tons of them)
gatling_1 | 12:24:24.756 [ERROR] a.a.ActorSystemImpl - Uncaught error from thread [GatlingSystem-akka.actor.default-dispatcher-4] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled
gatling_1 | java.lang.StackOverflowError: null
gatling_1 | at sun.nio.cs.UTF_8.updatePositions(UTF_8.java:77)
gatling_1 | at sun.nio.cs.UTF_8.access$200(UTF_8.java:57)
gatling_1 | at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:636)
gatling_1 | at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:691)
gatling_1 | at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)
gatling_1 | at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271)
gatling_1 | at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
gatling_1 | at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
gatling_1 | at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
gatling_1 | at java.io.PrintStream.write(PrintStream.java:526)
gatling_1 | at java.io.PrintStream.print(PrintStream.java:669)
gatling_1 | at java.io.PrintStream.println(PrintStream.java:823)
gatling_1 | at scala.Console$.println(Console.scala:148)
gatling_1 | at scala.Predef$.println(Predef.scala:315)
gatling_1 | at com.camptocamp.ComplexLoopSimulation$$anonfun$2.apply(ComplexLoopSimulation.scala:26)
gatling_1 | at com.camptocamp.ComplexLoopSimulation$$anonfun$2.apply(ComplexLoopSimulation.scala:25)
gatling_1 | at io.gatling.core.action.SessionHook.execute(SessionHook.scala:38)
gatling_1 | at io.gatling.core.action.BlockExit.exitBlock(BlockExit.scala:37)
gatling_1 | at io.gatling.core.action.BlockExit$.noBlockExitTriggered(BlockExit.scala:122)
gatling_1 | at io.gatling.core.action.Loop.execute(Loop.scala:52)
gatling_1 | at io.gatling.core.action.Action$class.$bang(Action.scala:35)
gatling_1 | at io.gatling.core.action.Loop.$bang(Loop.scala:36)
gatling_1 | at
io.gatling.core.action.SessionHook.io$gatling$core$action$SessionHook$$$anonfun$1(SessionHook.scala:38)
gatling_1 | at io.gatling.core.action.SessionHook$lambda$$execute$1.apply(SessionHook.scala:38)
gatling_1 | at io.gatling.core.action.SessionHook$lambda$$execute$1.apply(SessionHook.scala:38)
gatling_1 | at io.gatling.commons.validation.Success.map(Validation.scala:32)
gatling_1 | at io.gatling.core.action.SessionHook.execute(SessionHook.scala:38)
gatling_1 | at io.gatling.core.action.BlockExit.exitBlock(BlockExit.scala:37)
gatling_1 | at io.gatling.core.action.BlockExit$.noBlockExitTriggered(BlockExit.scala:122)
... (smells like an infinite recusion)