diff --git a/gym/monitoring/monitor.py b/gym/monitoring/monitor.py index 9515e8af0..61e7e5a90 100644 --- a/gym/monitoring/monitor.py +++ b/gym/monitoring/monitor.py @@ -191,6 +191,8 @@ class Monitor(object): logger.error('Could not close renderer for %s: %s', key, e) self.enabled = False + # Remove the env's pointer to this monitor + del self.env._monitor # Stop tracking this for autoclose del monitors[self.monitor_id] diff --git a/gym/monitoring/tests/test_monitor.py b/gym/monitoring/tests/test_monitor.py index ee62666d8..bcf26c597 100644 --- a/gym/monitoring/tests/test_monitor.py +++ b/gym/monitoring/tests/test_monitor.py @@ -45,3 +45,18 @@ def test_video_callable(): pass else: assert False + +def test_env_reuse(): + with tempdir() as temp: + env = gym.make('CartPole-v0') + env.monitor.start(temp) + env.monitor.close() + + env.monitor.start(temp, force=True) + env.reset() + env.step(env.action_space.sample()) + env.step(env.action_space.sample()) + env.monitor.close() + + results = monitor.load_results(temp) + assert results['episode_lengths'] == [2], 'Results: {}'.format(results)