* Try and fix the crashes in ffserver associated with the coded_frame stuff.
authorPhilip Gladstone <philipjsg@users.sourceforge.net>
Wed, 11 Dec 2002 03:16:51 +0000 (03:16 +0000)
committerPhilip Gladstone <philipjsg@users.sourceforge.net>
Wed, 11 Dec 2002 03:16:51 +0000 (03:16 +0000)
  This code is wrong, but it is not obvious what the right code is.
* Make sure that we reset SIGPIPE before execing ffmpeg.

Originally committed as revision 1330 to svn://svn.ffmpeg.org/ffmpeg/trunk

ffserver.c

index 8e66672d239259547c0f6af5109cf97ce6f3b2a1..1b9552d1d49c57e8fb899a0258d8020f77c36a76 100644 (file)
@@ -148,6 +148,8 @@ typedef struct HTTPContext {
                                  seconds max) */
 } HTTPContext;
 
+static AVFrame dummy_frame;
+
 /* each generated stream is described here */
 enum StreamType {
     STREAM_TYPE_LIVE,
@@ -402,6 +404,8 @@ static void start_children(FFStream *feed)
                 /* This is needed to make relative pathnames work */
                 chdir(my_program_dir);
 
+                signal(SIGPIPE, SIG_DFL);
+
                 execvp(pathname, feed->child_argv);
 
                 _exit(1);
@@ -2090,6 +2094,10 @@ static int http_prepare_data(HTTPContext *c)
                            sizeof(AVStream));
             st->codec.frame_number = 0; /* XXX: should be done in
                                            AVStream, not in codec */
+            /* I'm pretty sure that this is not correct...
+             * However, without it, we crash
+             */
+            st->codec.coded_frame = &dummy_frame;
         }
         c->got_key_frame = 0;
 
@@ -3156,6 +3164,7 @@ AVStream *add_av_stream1(FFStream *stream, AVCodecContext *codec)
         return NULL;
     fst->priv_data = av_mallocz(sizeof(FeedData));
     memcpy(&fst->codec, codec, sizeof(AVCodecContext));
+    fst->codec.coded_frame = &dummy_frame;
     stream->streams[stream->nb_streams++] = fst;
     return fst;
 }