The "when" parameter to start and stop is based on AudioContext.currentTime. Zero means "now" - currentTime also starts at zero when the AudioContext is created. So when you say ".start(0); .stop(2);" the second time around, the "stop" is already in the past (check AudioContext.currentTime - it's already >2), so the start never causes any effect.
Instead of what you're currently doing, do:
oscillator.start(context.currentTime);
oscillator.stop(context.currentTime+2);