b2World::Solve(b2TimeStep) ensures bodies are awake when processing them by calling b2Body::SetAwake(true).
regardless of the passed flag, b2Body::SetAwake(Boolean) sets the m_sleepTime to 0.0 in any case. this prevents b2Island::Solve(b2TimeStep, b2Vec2, Boolean) from putting bodies to sleep, since the accumulated sleep time is never bigger than the required b2Settings.b2_timeToSleep. since world step basically resets the bodies sleep time each step, they stay awake forever.
the appended patch reverts the changes in b2World back to a stable state, when b2World::Solve(b2TimeStep) checked for the bodies sleep state before changing it. (pre rev 152.)
diff patch for b2World.as rev 156