diff options
author | Bo Huang <bo.b.huang@intel.com> | 2014-09-29 14:54:02 +0800 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2014-11-10 15:45:16 -0800 |
commit | 4df4dfedf6beef891d05d4e80704f5f4a594a885 (patch) | |
tree | c2650b22f4d2d3f9a9ae7897ae67fe66b02af2ef /libsysutils | |
parent | ae52248fa7ab12e1c3458aede101f143b1c76ead (diff) | |
download | system_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.cpp | 3 |
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; } |