changeset 34283:3a4adac4e9a5

Make cache process detect when the main process disappeared and make it exit on its own in that case.
author reimar
date Thu, 01 Dec 2011 19:10:15 +0000
parents 6edabf4151e9
children f37139e765b9
files stream/cache2.c
diffstat 1 files changed, 13 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/stream/cache2.c	Thu Dec 01 19:09:20 2011 +0000
+++ b/stream/cache2.c	Thu Dec 01 19:10:15 2011 +0000
@@ -75,6 +75,9 @@
   int back_size;   // we should keep back_size amount of old bytes for backward seek
   int fill_limit;  // we should fill buffer only if space>=fill_limit
   int seek_limit;  // keep filling cache if distance is less that seek limit
+#if FORKED_CACHE
+  pid_t ppid; // parent PID to detect killed parent
+#endif
   // filler's pointers:
   int eof;
   off_t min_filepos; // buffer contain only a part of the file, from min-max pos
@@ -279,6 +282,13 @@
       s->stream_time_pos = pos;
     else
       s->stream_time_pos = MP_NOPTS_VALUE;
+#if FORKED_CACHE
+    // if parent PID changed, main process was killed -> exit
+    if (s->ppid != getppid()) {
+      mp_msg(MSGT_CACHE, MSGL_WARN, "Parent process disappeared, exiting cache process.\n");
+      return 0;
+    }
+#endif
     last = GetTimerMS();
   }
   if (s->control == -1) return 1;
@@ -346,6 +356,9 @@
 
   s->fill_limit=8*sector;
   s->back_size=s->buffer_size/2;
+#if FORKED_CACHE
+  s->ppid = getpid();
+#endif
   return s;
 }