Acquire isn't thread safe
Bug #878689 reported by
Sebastian Heinlein
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
apt (Ubuntu) |
New
|
Undecided
|
Unassigned |
Bug Description
We would like to move downloading in aptdaemon to a separate thread but it seems that apt isn't very thread safe. Also main thread doesn't do any changes we see a lot of string operation crashes in pkgAcqArchive:
Related branches
lp://staging/~aptdaemon-developers/aptdaemon/threading
- Aptdaemon Developers: Pending requested
-
Diff: 970 lines (+252/-111)6 files modifiedNEWS (+2/-0)
aptdaemon/core.py (+182/-43)
aptdaemon/loop.py (+0/-32)
aptdaemon/progress.py (+8/-14)
aptdaemon/utils.py (+30/-0)
aptdaemon/worker.py (+30/-22)
To post a comment you must log in.
#0 0x00007ffff69b33a5 in raise () from /lib/x86_ 64-linux- gnu/libc. so.6 64-linux- gnu/libc. so.6 :__verbose_ terminate_ handler( ) () from /usr/lib/ x86_64- linux-gnu/ libstdc+ +.so.6 x86_64- linux-gnu/ libstdc+ +.so.6 x86_64- linux-gnu/ libstdc+ +.so.6 x86_64- linux-gnu/ libstdc+ +.so.6 x86_64- linux-gnu/ libstdc+ +.so.6 :_Rep:: _S_create( unsigned long, unsigned long, std::allocator< char> const&) () x86_64- linux-gnu/ libstdc+ +.so.6 :_Rep:: _M_clone( std::allocator< char> const&, unsigned long) () from /usr/lib/ x86_64- linux-gnu/ libstdc+ +.so.6 string< char, std::char_ traits< char>, std::allocator< char> >::basic_ string( std::string const&) () x86_64- linux-gnu/ libstdc+ +.so.6 :Done(std: :string, unsigned long long, std::string, pkgAcquire: :MethodConfig* ) () libapt- pkg.so. 4.11 :Worker: :RunMessages( ) () from /usr/lib/ libapt- pkg.so. 4.11 :Worker: :InFdReady( ) () from /usr/lib/ libapt- pkg.so. 4.11 :RunFds( fd_set* , fd_set*) () from /usr/lib/ libapt- pkg.so. 4.11 :Run(int) () from /usr/lib/ libapt- pkg.so. 4.11 python2. 7/dist- packages/ apt_pkg. so
#1 0x00007ffff69b6b0b in abort () from /lib/x86_
#2 0x00007ffff217cd7d in __gnu_cxx:
#3 0x00007ffff217af26 in ?? () from /usr/lib/
#4 0x00007ffff217af53 in std::terminate() () from /usr/lib/
#5 0x00007ffff217b04e in __cxa_throw () from /usr/lib/
#6 0x00007ffff217b52d in operator new(unsigned long) () from /usr/lib/
#7 0x00007ffff2164059 in std::string:
from /usr/lib/
#8 0x00007ffff2164dcb in std::string:
#9 0x00007ffff216552c in std::basic_
from /usr/lib/
#10 0x00007ffff2455c5d in pkgAcqArchive:
from /usr/lib/
#11 0x00007ffff243f099 in pkgAcquire:
#12 0x00007ffff2440a07 in pkgAcquire:
#13 0x00007ffff243805b in pkgAcquire:
#14 0x00007ffff2439e30 in pkgAcquire:
#15 0x00007ffff26fd1ce in ?? () from /usr/lib/
#16 0x00000000004b6569 in PyEval_EvalFrameEx ()
#17 0x00000000004b6d77 in PyEval_EvalFrameEx ()
#18 0x00000000004bcd2d in PyEval_EvalCodeEx ()
#19 0x0000000000448edf in ?? ()
#20 0x000000000041ad2a in PyObject_Call ()
#21 0x00000000004b84b6 in PyEval_EvalFrameEx ()
#22 0x00000000004bcd2d in PyEval_EvalCodeEx ()
#23 0x00000000004b6a5b in PyEval_EvalFrameEx ()
#24 0x00000000004bcd2d in PyEval_EvalCodeEx ()
#25 0x0000000000449098 in ?? ()
#26 0x000000000041ad2a in PyObject_Call ()
#27 0x00000000004b84b6 in PyEval_EvalFrameEx ()
#28 0x00000000004b6d77 in PyEval_EvalFrameEx ()