summaryrefslogtreecommitdiffstats
path: root/libsysutils
diff options
context:
space:
mode:
authorBo Huang <bo.b.huang@intel.com>2014-09-29 14:54:02 +0800
committerElliott Hughes <enh@google.com>2014-11-10 15:45:16 -0800
commit4df4dfedf6beef891d05d4e80704f5f4a594a885 (patch)
treec2650b22f4d2d3f9a9ae7897ae67fe66b02af2ef /libsysutils
parentae52248fa7ab12e1c3458aede101f143b1c76ead (diff)
downloadsystem_core-4df4dfedf6beef891d05d4e80704f5f4a594a885.zip
system_core-4df4dfedf6beef891d05d4e80704f5f4a594a885.tar.gz
system_core-4df4dfedf6beef891d05d4e80704f5f4a594a885.tar.bz2
When new error happend,then errno should be updated accordingly.
Otherwise, need to keep previous errno. Reproduced steps: pre-condition: DUT support external SDcard or Usb mass storage; 1. Insert blank(no partition) SDcard or UMS to DUT; Expected result: Should prompt user with storage error. Test result: There is no notification for error. Error log: 01-01 01:06:49.239 I/fsck_msdos( 200): fsck_msdos terminated by exit(8) 01-01 01:06:49.239 E/Vold ( 200): /dev/block/vold/179:16 failed FS checks (I/O error) 01-01 01:06:49.239 D/Vold ( 200): Volume sdcard1 state changing 3 (Checking) -> 1 (Idle-Unmounted) 01-01 01:06:49.239 W/Vold ( 200): Returning OperationFailed - no handler for errno 0) Root cause analysis: 1.Volume::setState will call senBroadcase to send out state notification; 2.Finally, SocketClient::sendDataLockedv was called to sent message. In sendDataLockedv funtion, when current == iovcnt, e is 0 by default. So Vold get incorrect errno. Change-Id: Icb32a4193f02f22b5e3feaba177bc278f8f1f41b Signed-off-by: Bo Huang <bo.b.huang@intel.com>
Diffstat (limited to 'libsysutils')
-rw-r--r--libsysutils/src/SocketClient.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/libsysutils/src/SocketClient.cpp b/libsysutils/src/SocketClient.cpp
index d3ce8f5..4ab06b4 100644
--- a/libsysutils/src/SocketClient.cpp
+++ b/libsysutils/src/SocketClient.cpp
@@ -220,7 +220,8 @@ int SocketClient::sendDataLockedv(struct iovec *iov, int iovcnt) {
sigaction(SIGPIPE, &old_action, &new_action);
- errno = e;
+ if ( e != 0 )
+ errno = e;
return ret;
}