[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#671721: libapt-pkg4.12: pkgAcquire::Worker::OutFdReady() fails after write() fails with EAGAIN



Package: libapt-pkg4.12
Version: 0.9.0~exp1
Severity: important
Tags: patch

Dear Maintainer,

After upgrading apt to 0.9.0~exp1 or later, in some locales such as
ja_JP.UTF-8 or zh_CN.UTF-8, aptitude stucks when downloading any data:

 # env LANG=ja_JP.UTF-8 aptitude update
 ^C
 # env LANG=ja_JP.UTF-8 aptitude changelog aptitude
 ^C

By bisecting changes in the bzr repository I found this problem is
caused by a commit revision 2129.55.33 "use a static FileFd::Write
overload to reduce duplication of write()-retry code".

More specifically, replacing the loop in function
pkgAcquire::Worker::OutFdReady with a call to FileFd::Write causes the
behavior. Previously, this function tries a single write() call against
file descriptor OutFd, trims OutQueue and returns true. The current
version calls FileFd::Write, which issues write() repeatedly until the
request finishes. This write() fails with errno EAGAIN after a
successful write of 65536 bytes, which suggests the size of the buffer
of a pipe OutFd points to.

An attached patch simply reverts pkgAcquire::Worker::OutFdReady to its
0.8.16~exp13 version.

Regards,
-- 
YOSHINO Yoshihito <yy.y.ja.jp@gmail.com>

-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'),
(1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 3.3.0-trunk-amd64 (SMP w/4 CPU cores)
Locale: LANG=ja_JP.UTF-8, LC_CTYPE=ja_JP.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages libapt-pkg4.12 depends on:
ii  libbz2-1.0         1.0.6-1
ii  libc6              2.13-32
ii  libgcc1            1:4.7.0-7
ii  libstdc++6         4.7.0-7
ii  multiarch-support  2.13-32
ii  zlib1g             1:1.2.7.dfsg-1

libapt-pkg4.12 recommends no packages.

libapt-pkg4.12 suggests no packages.

-- no debconf information

Attachment: revert_use_of_static_write_in_OutFdReady.patch
Description: Binary data


Reply to: