Public bug reported: We tried to implement a function returning an Acquire object "fetcher". Whenever we called "fetcher.run()" after generating the object using this function our program crashed with "*** Error in `/usr/bin/python': double free or corruption (fasttop): ...... ***.
You can reproduce this with the attached example code ("func=1"); the package to download must not be in the local archive. When you set "func=0" in this example the code works as expected. Our researches indicate that Acquire.run() seems to depend on data structures (memory) of the PackageManager object "pm". In "pm.get_archives(fetcher, ...)" the "fetcher" object stores pointers to data structures owned by PackageManager object "pm". This data structures (filenames) are needed for "fetcher.run()". But in the case "func=1" the PackageManager pm object is automatically freed by Python as soon as function "initFetcher(progress)" is left. Therefore the pointers stored in Acquire object "fetcher" are no longer valid. # lsb_release -rd Description: Ubuntu 14.04.5 LTS Release: 14.04 python-apt 0.9.3.5ubuntu2 amd64 ** Affects: python-apt (Ubuntu) Importance: Undecided Status: New ** Attachment added: "acquire-2.py" https://bugs.launchpad.net/bugs/1701570/+attachment/4906676/+files/acquire-2.py -- You received this bug notification because you are a member of Ubuntu Touch seeded packages, which is subscribed to python-apt in Ubuntu. https://bugs.launchpad.net/bugs/1701570 Title: Acquire.run(): crash with "double free or corruption" Status in python-apt package in Ubuntu: New Bug description: We tried to implement a function returning an Acquire object "fetcher". Whenever we called "fetcher.run()" after generating the object using this function our program crashed with "*** Error in `/usr/bin/python': double free or corruption (fasttop): ...... ***. You can reproduce this with the attached example code ("func=1"); the package to download must not be in the local archive. When you set "func=0" in this example the code works as expected. Our researches indicate that Acquire.run() seems to depend on data structures (memory) of the PackageManager object "pm". In "pm.get_archives(fetcher, ...)" the "fetcher" object stores pointers to data structures owned by PackageManager object "pm". This data structures (filenames) are needed for "fetcher.run()". But in the case "func=1" the PackageManager pm object is automatically freed by Python as soon as function "initFetcher(progress)" is left. Therefore the pointers stored in Acquire object "fetcher" are no longer valid. # lsb_release -rd Description: Ubuntu 14.04.5 LTS Release: 14.04 python-apt 0.9.3.5ubuntu2 amd64 To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/python-apt/+bug/1701570/+subscriptions -- Mailing list: https://launchpad.net/~touch-packages Post to : touch-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~touch-packages More help : https://help.launchpad.net/ListHelp