repair default keyframe load, tweak init default histogram threshold
[goodguy/history.git] / cinelerra-5.1 / cinelerra / renderfarmclient.C
index 5895710f13ffcf66737dc6ffe802853d71f88ed9..b12b5225a77bd7482a6e96e6143dac4a4e4df4d6 100644 (file)
@@ -51,7 +51,9 @@
 #include <unistd.h>
 
 
-
+#ifndef AF_FILE
+#define AF_FILE AF_LOCAL
+#endif
 
 // The render client waits for connections from the server.
 // Then it starts a thread for each connection.
@@ -65,16 +67,24 @@ RenderFarmClient::RenderFarmClient(int port,
        this->port = port;
        this->deamon_path = deamon_path;
        SigHandler *signals = new SigHandler;
-       signals->initialize();
+       signals->initialize("/tmp/cinelerra_farm%d.dmp");
 
        this_pid = getpid();
        (void)nice(nice_value);
 
-
+       boot_defaults = 0;
        MWindow::init_defaults(boot_defaults, config_path);
        boot_preferences = new Preferences;
        boot_preferences->load_defaults(boot_defaults);
        MWindow::init_plugins(0, boot_preferences);
+       BC_Signals::set_catch_segv(boot_preferences->trap_sigsegv);
+       BC_Signals::set_catch_intr(0);
+        if( boot_preferences->trap_sigsegv ) {
+                BC_Trace::enable_locks();
+        }
+        else {
+                BC_Trace::disable_locks();
+        }
 
        strcpy(string, boot_preferences->plugin_dir);
        strcat(string, "/" FONT_SEARCHPATH);
@@ -86,11 +96,8 @@ RenderFarmClient::RenderFarmClient(int port,
 
 RenderFarmClient::~RenderFarmClient()
 {
-//     delete thread;
        delete boot_defaults;
        delete boot_preferences;
-       plugindb->remove_all_objects();
-       delete plugindb;
 }
 
 
@@ -157,53 +164,40 @@ void RenderFarmClient::main_loop()
        printf("RenderFarmClient::main_loop: client started\n");
        while(1)
        {
-               if(listen(socket_fd, 256) < 0)
-       {
-               perror(_("RenderFarmClient::main_loop: listen"));
-               return;
-       }
+               if(listen(socket_fd, 256) < 0) {
+                       perror(_("RenderFarmClient::main_loop: listen"));
+                       return;
+               }
 
                int new_socket_fd;
 
-
-
                if(!deamon_path)
                {
                        struct sockaddr_in clientname;
                        socklen_t size = sizeof(clientname);
-               if((new_socket_fd = accept(socket_fd,
-                               (struct sockaddr*)&clientname,
-                                               &size)) < 0)
-               {
-                       perror(_("RenderFarmClient::main_loop: accept"));
-                       return;
-               }
-                       else
-                       {
-printf("RenderFarmClient::main_loop: Session started from %s\n", inet_ntoa(clientname.sin_addr));
-                               RenderFarmClientThread *thread =
-                                       new RenderFarmClientThread(this);
-                               thread->main_loop(new_socket_fd);
+                       if( (new_socket_fd = accept(socket_fd,
+                               (struct sockaddr*)&clientname, &size) ) < 0 ) {
+                               perror(_("RenderFarmClient::main_loop: accept"));
+                               return;
                        }
+printf("RenderFarmClient::main_loop: Session started from %s\n", inet_ntoa(clientname.sin_addr));
+                       RenderFarmClientThread *thread =
+                               new RenderFarmClientThread(this);
+                       thread->main_loop(new_socket_fd);
                }
                else
                {
                        struct sockaddr_un clientname;
                        socklen_t size = sizeof(clientname);
-               if((new_socket_fd = accept(socket_fd,
-                               (struct sockaddr*)&clientname,
-                                               &size)) < 0)
-               {
-                       perror(_("RenderFarmClient::main_loop: accept"));
-                       return;
-               }
-                       else
-                       {
-printf("RenderFarmClient::main_loop: Session started from %s\n", clientname.sun_path);
-                               RenderFarmClientThread *thread =
-                                       new RenderFarmClientThread(this);
-                               thread->main_loop(new_socket_fd);
+                       if( (new_socket_fd = accept(socket_fd,
+                                       (struct sockaddr*)&clientname, &size)) < 0 ) {
+                               perror(_("RenderFarmClient::main_loop: accept"));
+                               return;
                        }
+printf("RenderFarmClient::main_loop: Session started from %s\n", clientname.sun_path);
+                       RenderFarmClientThread *thread =
+                               new RenderFarmClientThread(this);
+                       thread->main_loop(new_socket_fd);
                }
        }
 }
@@ -228,6 +222,7 @@ RenderFarmClientThread::RenderFarmClientThread(RenderFarmClient *client)
  : Thread(0, 0, 1)
 {
        this->client = client;
+       this->edl = 0;
        frames_per_second = 0;
        Thread::set_synchronous(0);
 //     fs_client = 0;
@@ -447,32 +442,19 @@ void RenderFarmClientThread::read_asset(int socket_fd, Asset *asset)
 }
 
 void RenderFarmClientThread::read_edl(int socket_fd,
-       EDL *edl,
-       Preferences *preferences)
+               EDL *edl, Preferences *preferences)
 {
        lock("RenderFarmClientThread::read_edl");
-       send_request_header(RENDERFARM_EDL,
-               0);
+       send_request_header(RENDERFARM_EDL, 0);
 
        char *string;
        read_string(string);
 
-
        FileXML file;
        file.read_from_string((char*)string);
        delete [] string;
 
-
-
-
-
-
-
-
-       edl->load_xml(&file,
-               LOAD_ALL);
-
-
+       edl->load_xml(&file, LOAD_ALL);
        unlock();
 }
 
@@ -501,7 +483,7 @@ int RenderFarmClientThread::read_package(int socket_fd, RenderPackage *package)
 // Signifies end of session.
        if(!data)
        {
-//             printf(_("RenderFarmClientThread::read_package no output path recieved.\n"));
+//             printf(_("RenderFarmClientThread::read_package no output path received.\n"));
                unlock();
                return 1;
        }
@@ -571,12 +553,13 @@ void RenderFarmClientThread::run()
 
 // Get the pid of the fork if inside the fork
        pid = getpid();
-
-
+       BC_Signals::set_trap_hook(trap_hook, this);
+       TheList::reset();
 
        int socket_fd = this->socket_fd;
-
-       init_client_keepalive();
+       int watchdog_timeout = client->boot_preferences->renderfarm_watchdog_timeout;
+       if( watchdog_timeout > 0 )
+               init_client_keepalive(watchdog_timeout);
 
 // Get command to run
        int command;
@@ -600,11 +583,11 @@ void RenderFarmClientThread::run()
 }
 
 
-void RenderFarmClientThread::init_client_keepalive()
+void RenderFarmClientThread::init_client_keepalive(int timeout_secs)
 {
        keep_alive = new RenderFarmKeepalive(this);
        keep_alive->start();
-       watchdog = new RenderFarmWatchdog(0, this);
+       watchdog = new RenderFarmWatchdog(timeout_secs, 0, this);
        watchdog->start();
 }
 
@@ -613,16 +596,14 @@ void RenderFarmClientThread::init_client_keepalive()
 void RenderFarmClientThread::do_tuner(int socket_fd)
 {
 // Currently only 1 tuner driver.  Maybe more someday.
-       DVBTune server(this);
-       server.main_loop();
-       ::close(socket_fd);
+//     DVBTune server(this);
+//     server.main_loop();
+//     ::close(socket_fd);
 }
 
 
 void RenderFarmClientThread::do_packages(int socket_fd)
 {
-
-       EDL *edl;
        RenderPackage *package;
        Asset *default_asset;
        Preferences *preferences;
@@ -642,11 +623,6 @@ void RenderFarmClientThread::do_packages(int socket_fd)
        edl = new EDL;
        edl->create_objects();
 
-
-
-
-
-
 //printf("RenderFarmClientThread::run 3\n");
        read_preferences(socket_fd, preferences);
 //printf("RenderFarmClientThread::run 4\n");
@@ -656,17 +632,7 @@ void RenderFarmClientThread::do_packages(int socket_fd)
 //edl->dump();
 //printf("RenderFarmClientThread::run 6\n");
 
-
-
-
-
-
-
-
-       package_renderer.initialize(0,
-                       edl,
-                       preferences,
-                       default_asset);
+       package_renderer.initialize(0, edl, preferences, default_asset);
 
 // Read packages
        while(1)
@@ -712,16 +678,18 @@ void RenderFarmClientThread::do_packages(int socket_fd)
        default_asset->Garbage::remove_user();
 //printf("RenderFarmClientThread::run 10\n");
        edl->Garbage::remove_user();
+       edl = 0;
 //printf("RenderFarmClientThread::run 11\n");
        delete preferences;
 printf(_("RenderFarmClientThread::run: Session finished.\n"));
 }
 
-
-
-
-
-
+void RenderFarmClientThread::trap_hook(FILE *fp, void *vp)
+{
+       RenderFarmClientThread *thread = (RenderFarmClientThread*)vp;
+       fprintf(fp, "\nEDL:\n");
+       if( thread->edl ) thread->edl->dump(fp);
+}
 
 
 
@@ -747,8 +715,7 @@ void RenderFarmKeepalive::run()
                enable_cancel();
                sleep(5);
                disable_cancel();
-               if(!done)
-               {
+               if( !done ) {
 //printf("RenderFarmKeepalive::run 1\n");
 // watchdog thread kills this if it gets stuck
                        client_thread->ping_server();
@@ -758,19 +725,6 @@ void RenderFarmKeepalive::run()
 }
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
 FarmPackageRenderer::FarmPackageRenderer(RenderFarmClientThread *thread,
                int socket_fd)
  : PackageRenderer()
@@ -780,7 +734,6 @@ FarmPackageRenderer::FarmPackageRenderer(RenderFarmClientThread *thread,
 }
 
 
-
 FarmPackageRenderer::~FarmPackageRenderer()
 {
 }
@@ -857,11 +810,3 @@ int FarmPackageRenderer::set_video_map(int64_t position, int value)
 }
 
 
-
-
-
-
-
-
-
-