diff options
author | Peter Wu <lekensteyn@gmail.com> | 2013-08-22 23:19:34 +0200 |
---|---|---|
committer | Peter Wu <lekensteyn@gmail.com> | 2013-09-02 11:45:34 +0200 |
commit | 0a0a7c80e7d3a9c1c7e8299a07a2b7b990f13099 (patch) | |
tree | ef7a541ec88b042dbb1a51e719d97007a959f7e6 | |
parent | 1902da5f36bf039130f41c7a3eea85d021b30785 (diff) | |
download | upower-0a0a7c80e7d3a9c1c7e8299a07a2b7b990f13099.tar.gz |
hidpp: retry when read or g_poll is interrupted
Signed-off-by: Peter Wu <lekensteyn@gmail.com>
-rw-r--r-- | src/linux/hidpp-device.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/linux/hidpp-device.c b/src/linux/hidpp-device.c index c0e7c4b..e6e2ba7 100644 --- a/src/linux/hidpp-device.c +++ b/src/linux/hidpp-device.c @@ -368,6 +368,9 @@ hidpp_device_cmd (HidppDevice *device, for (;;) { wrote = g_poll (poll, G_N_ELEMENTS(poll), remaining_time); if (wrote < 0) { + if (errno == EINTR) + continue; + g_set_error (error, 1, 0, "Failed to read from device: %s", g_strerror (errno)); @@ -382,6 +385,9 @@ hidpp_device_cmd (HidppDevice *device, wrote = read (priv->fd, &read_msg, sizeof (*response)); if (wrote <= 0) { + if (wrote == -1 && errno == EINTR) + continue; + g_set_error (error, 1, 0, "Unable to read response from device: %s", g_strerror (errno)); |