return 0;
}
+int streamer_run_done_rq;
+
void* streamer_run(void* args)
{
int done;
done = 0;
- while (!done) {
+ while (!(done = streamer_run_done_rq)) {
AVPacket *pkt;
pkt = read_input_packet(s);
if (pkt == NULL) {
return NULL;
}
+void wait_for_ending_command(void) {
+ sigset_t sigset;
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGINT);
+ sigaddset(&sigset, SIGTERM);
+ sigwaitinfo(&sigset, NULL);
+}
+static void block_signals(void) {
+ sigset_t sigset;
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGINT);
+ sigaddset(&sigset, SIGTERM);
+ sigprocmask(SIG_BLOCK,&sigset,NULL);
+ pthread_sigmask(SIG_BLOCK,&sigset,NULL);
+}
+
+
int main(int argc, char *argv[])
{
//long int cpu_budget, cpu_period;
int ret;
+ block_signals();
+
#ifdef CONFIG_STREAMER_WITH_FRSH
ret = frsh_init();
if (ret) PERROR_AND_EXIT(ret, "frsh_init1");
ret = frsh_thread_create_and_bind(cpu_vres, &thread, &frsh_attr,
streamer_run, (void*) NULL);
if (ret) PERROR_AND_EXIT(ret, "frsh_thread_create_and_bind");
+
+ wait_for_ending_command();
+
+ streamer_run_done_rq = 1;
pthread_join(thread.pthread_id, (void**) NULL);
+
+ printf("Ending contracts\n");
+
+ ret = frsh_contract_cancel(cpu_vres);
+ if (ret) PERROR_AND_EXIT(ret, "frsh_contract_cancel");
+
+ printf("Finishing\n");
+
#else
pthread_attr_t attr;
pthread_t streamer_th;
ret = pthread_create(&streamer_th, &attr, streamer_run, (void*) NULL);
if (ret)
printf("Failed to create streamer thread\n.");
+
+ wait_for_ending_command();
+
+ streamer_run_done_rq = 1;
+
pthread_join(streamer_th, (void**) NULL);
+
+ printf("Finishing\n");
#endif
return 0;