##// END OF EJS Templates
Partial fix for extra reference holding bug. Not complete yet.
Fernando Perez -
Show More
@@ -1575,12 +1575,16 b' Currently the magic system has the following functions:\\n"""'
1575 1575
1576 1576 # pickle fix. See iplib for an explanation. But we need to make sure
1577 1577 # that, if we overwrite __main__, we replace it at the end
1578 if prog_ns['__name__'] == '__main__':
1578 main_mod_name = prog_ns['__name__']
1579
1580 if main_mod_name == '__main__':
1579 1581 restore_main = sys.modules['__main__']
1580 1582 else:
1581 1583 restore_main = False
1582 1584
1583 sys.modules[prog_ns['__name__']] = main_mod
1585 # This needs to be undone at the end to prevent holding references to
1586 # every single object ever created.
1587 sys.modules[main_mod_name] = main_mod
1584 1588
1585 1589 stats = None
1586 1590 try:
@@ -1673,9 +1677,15 b' Currently the magic system has the following functions:\\n"""'
1673 1677 del prog_ns['__name__']
1674 1678 self.shell.user_ns.update(prog_ns)
1675 1679 finally:
1680 # Ensure key global structures are restored
1676 1681 sys.argv = save_argv
1677 1682 if restore_main:
1678 1683 sys.modules['__main__'] = restore_main
1684 else:
1685 # Remove from sys.modules the reference to main_mod we'd
1686 # added. Otherwise it will trap references to objects
1687 # contained therein.
1688 del sys.modules[main_mod_name]
1679 1689 self.shell.reloadhist()
1680 1690
1681 1691 return stats
General Comments 0
You need to be logged in to leave comments. Login now