#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.
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);
RenderFarmClient::~RenderFarmClient()
{
-// delete thread;
delete boot_defaults;
delete boot_preferences;
- plugindb->remove_all_objects();
- delete plugindb;
}
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);
}
}
}
: Thread(0, 0, 1)
{
this->client = client;
+ this->edl = 0;
frames_per_second = 0;
Thread::set_synchronous(0);
// fs_client = 0;
}
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();
}
// 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;
}
// 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;
}
-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();
}
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;
edl = new EDL;
edl->create_objects();
-
-
-
-
-
//printf("RenderFarmClientThread::run 3\n");
read_preferences(socket_fd, preferences);
//printf("RenderFarmClientThread::run 4\n");
//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)
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);
+}
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();
}
-
-
-
-
-
-
-
-
-
-
-
-
-
FarmPackageRenderer::FarmPackageRenderer(RenderFarmClientThread *thread,
int socket_fd)
: PackageRenderer()
}
-
FarmPackageRenderer::~FarmPackageRenderer()
{
}
}
-
-
-
-
-
-
-
-