From 4df4dfedf6beef891d05d4e80704f5f4a594a885 Mon Sep 17 00:00:00 2001 From: Bo Huang Date: Mon, 29 Sep 2014 14:54:02 +0800 Subject: 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 --- libsysutils/src/SocketClient.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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; } -- cgit v1.1