X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frenderfarmclient.C;h=24eee2a6af6cf970fc5ff6d99e4278dd2885cc83;hb=803cf48f8f7ee246eb5473e55fc2125e8b398250;hp=5895710f13ffcf66737dc6ffe802853d71f88ed9;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/renderfarmclient.C b/cinelerra-5.1/cinelerra/renderfarmclient.C index 5895710f..24eee2a6 100644 --- a/cinelerra-5.1/cinelerra/renderfarmclient.C +++ b/cinelerra-5.1/cinelerra/renderfarmclient.C @@ -65,7 +65,7 @@ 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); @@ -75,6 +75,14 @@ RenderFarmClient::RenderFarmClient(int port, 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 +94,8 @@ RenderFarmClient::RenderFarmClient(int port, RenderFarmClient::~RenderFarmClient() { -// delete thread; delete boot_defaults; delete boot_preferences; - plugindb->remove_all_objects(); - delete plugindb; } @@ -157,53 +162,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 +220,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 +440,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(); } @@ -571,12 +551,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 +581,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(); } @@ -621,8 +602,6 @@ void RenderFarmClientThread::do_tuner(int socket_fd) void RenderFarmClientThread::do_packages(int socket_fd) { - - EDL *edl; RenderPackage *package; Asset *default_asset; Preferences *preferences; @@ -642,11 +621,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 +630,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 +676,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 +713,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 +723,6 @@ void RenderFarmKeepalive::run() } - - - - - - - - - - - - - FarmPackageRenderer::FarmPackageRenderer(RenderFarmClientThread *thread, int socket_fd) : PackageRenderer() @@ -780,7 +732,6 @@ FarmPackageRenderer::FarmPackageRenderer(RenderFarmClientThread *thread, } - FarmPackageRenderer::~FarmPackageRenderer() { } @@ -857,11 +808,3 @@ int FarmPackageRenderer::set_video_map(int64_t position, int value) } - - - - - - - -