Skip to content

Commit

Permalink
[coreSocket,slave,jobs] Try to reduce wait before closing application…
Browse files Browse the repository at this point in the history
… after job completion

This should make starting the next job while Avidemux window from the previous
one is still open much less likely.
  • Loading branch information
eumagga0x2a committed Jan 1, 2021
1 parent 11c145a commit 675eb8a
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 30 deletions.
28 changes: 24 additions & 4 deletions avidemux/common/ADM_slave.cpp
Expand Up @@ -71,8 +71,7 @@ bool ADM_slaveReportProgress(uint32_t percent)
ADM_socketMessage msg;
msg.setPayloadAsUint32_t(percent);
msg.command=ADM_socketCommand_Progress;
mySocket->sendMessage(msg);
return true;
return mySocket->sendMessage(msg);
}
/**
\fn ADM_slaveReportProgress
Expand All @@ -83,8 +82,29 @@ bool ADM_slaveSendResult(bool result)
ADM_socketMessage msg;
msg.setPayloadAsUint32_t(result);
msg.command=ADM_socketCommand_End;
mySocket->sendMessage(msg);
ADM_usleep(5*1000000); // wait 5 sec to make sure the data is delivered
if(!mySocket->sendMessage(msg))
return false;
ADM_usleep(10*1000); // give recipient a chance to respond
int retries=5;
while(retries>0)
{
if(!mySocket->isAlive())
break;
if(mySocket->pollMessage(msg))
{
if(msg.command == ADM_socketCommand_Readback)
{
uint32_t val;
if(msg.getPayloadAsUint32_t(&val) && val == result)
return true;
}
}
retries--;
ADM_info("Will retry to receive readback in a second, %d retries left.\n",retries);
ADM_usleep(1000*1000);
}
if(retries>0)
ADM_usleep(retries*1000*1000); // wait up to 5 sec to make sure the data is delivered
return true;
}

Expand Down
54 changes: 29 additions & 25 deletions avidemux/qt4/ADM_jobs/src/ADM_runOneJob.cpp
Expand Up @@ -178,15 +178,15 @@ bool jobWindow::spawnChild(const char *exeName, const string &script, const stri
bool jobWindow::runOneJob( ADMJob &job)
{
bool r=false;
uint32_t version;
job.startTime=ADM_getSecondsSinceEpoch();
job.status=ADM_JOB_RUNNING;
ADM_commandSocket *runSocket=NULL;
ADM_socketMessage msg;
uint32_t v, version, wait=500; // by default, give application 500 ms to exit

ADMJob::jobUpdate(job);
refreshList();
ADM_socketMessage msg;
uint32_t v;


// 1- Start listening to socket

// 2- Spawn child
Expand Down Expand Up @@ -230,28 +230,31 @@ bool jobWindow::runOneJob( ADMJob &job)
switch(msg.command)
{
case ADM_socketCommand_End:
if(msg.getPayloadAsUint32_t(&v))
{
r=(bool)v;
ADM_info("Result is %d\n",r);
goto done;
}else
{
ADM_error("Can read End payload \n");
}
break;
if(!msg.getPayloadAsUint32_t(&v))
{
ADM_error("Cannot read End payload\n");
break;
}
r=(bool)v;
ADM_info("Result is %d\n",r);
msg.command = ADM_socketCommand_Readback;
msg.setPayloadAsUint32_t(v);
if(!runSocket->sendMessage(msg))
wait+=5000; // avoid starting next job while the application is still running
goto done;
break;
case ADM_socketCommand_Progress:
if(msg.getPayloadAsUint32_t(&v))
{
printf("Progress %d %%\n",(int)v);
dialog->setPercent(v);
}else
{
ADM_error("Can read End payload \n");
}
break;
default: ADM_error("Unknown command\n");
break;
if(!msg.getPayloadAsUint32_t(&v))
{
ADM_error("Cannot read Progress payload\n");
break;
}
printf("Progress %d %%\n",(int)v);
dialog->setPercent(v);
break;
default:
ADM_error("Unknown command\n");
break;
}
}
else
Expand All @@ -272,5 +275,6 @@ bool jobWindow::runOneJob( ADMJob &job)
if(runSocket) delete runSocket;
refreshList();
ADM_info("Running job id = %d\n",job.id);
ADM_usleep(wait*1000); // Give application some time to exit
return r;
}
3 changes: 2 additions & 1 deletion avidemux_core/ADM_coreSocket/include/ADM_coreCommandSocket.h
Expand Up @@ -18,7 +18,7 @@
#include "ADM_coreSocket6_export.h"
#include "ADM_coreSocket.h"

#define ADM_COMMAND_SOCKET_VERSION 2
#define ADM_COMMAND_SOCKET_VERSION 3

#define ADM_COMMAND_SOCKET_MAX_PAYLOAD 16

Expand All @@ -30,6 +30,7 @@ typedef enum
ADM_socketCommand_Hello=1,
ADM_socketCommand_End=2,
ADM_socketCommand_Progress=3,
ADM_socketCommand_Readback=4
}ADM_socketCommand;

/**
Expand Down

0 comments on commit 675eb8a

Please sign in to comment.