maru_camera : fixed a bug that occurs a lock-up when capture.
authorjinhyung.jo <jinhyung.jo@samsung.com>
Wed, 13 Feb 2013 07:03:16 +0000 (16:03 +0900)
committerjinhyung.jo <jinhyung.jo@samsung.com>
Wed, 13 Feb 2013 07:06:42 +0000 (16:06 +0900)
The cause of this issue is that continuous timeout is occurred on select().
(The webcam on host PC does not work properly for some reason.)
Fixed as follows:
If the timeout occurs for 5 seconds continually,
raises a error and notifies to upper layer.

Signed-off-by: Jinhyung Jo <jinhyung.jo@samsung.com>
tizen/src/hw/maru_camera_linux_pci.c

index 66ab2aa7969437b95784f32f20a97bce0e275665..a6682f63ccc2f12908b617cb74770db12431dbbd 100644 (file)
@@ -464,6 +464,7 @@ static int __v4l2_streaming(MaruCamState *state)
     fd_set fds;
     struct timeval tv;
     int ret;
+    static uint32_t timeout_n;
 
     FD_ZERO(&fds);
     FD_SET(v4l2_fd, &fds);
@@ -481,7 +482,12 @@ static int __v4l2_streaming(MaruCamState *state)
         __raise_err_intr(state);
         return -1;
     } else if (!ret) {
-        ERR("Select timed out\n");
+        timeout_n++;
+        ERR("Select timed out: count(%u)\n", timeout_n);
+        if (timeout_n >= 5) {
+            __raise_err_intr(state);
+            return -1;
+        }
         return 0;
     }
 
@@ -497,6 +503,12 @@ static int __v4l2_streaming(MaruCamState *state)
         __raise_err_intr(state);
         return -1;
     }
+
+    /* clear the skip count for select time-out */
+    if (timeout_n > 0) {
+        timeout_n = 0;
+    }
+
     return 0;
 }