Trisurf Monte Carlo simulator
Samo Penic
2016-03-15 6e42ef0edaba59fd344e89ffd469202ff2bd39ac
File locking into .lock seems to work fine
2 files modified
18 ■■■■■ changed files
src/general.c 14 ●●●● patch | view | raw | blame | history
src/main.c 4 ●●●● patch | view | raw | blame | history
src/general.c
@@ -61,7 +61,7 @@
    fd = open(pidFile, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
    if (fd == -1){
        ts_fprintf(stderr,"Could not open PID file %s", pidFile);
    fatal("Cannot continue",1);
    fatal("Cannot continue (1)",1);
}
    if (flags & CPF_CLOEXEC) {
@@ -75,13 +75,13 @@
        flags = fcntl(fd, F_GETFD);                     /* Fetch flags */
        if (flags == -1){
            ts_fprintf(stderr,"Could not get flags for PID file %s", pidFile);
    fatal("Cannot continue",1);
    fatal("Cannot continue (2)",1);
}
        flags |= FD_CLOEXEC;                            /* Turn on FD_CLOEXEC */
        if (fcntl(fd, F_SETFD, flags) == -1)            /* Update flags */
            ts_fprintf(stderr,"Could not set flags for PID file %s", pidFile);
        fatal("Cannot continue",1);
        fatal("Cannot continue (3)",1);
        
    }
@@ -89,24 +89,24 @@
        if (errno  == EAGAIN || errno == EACCES){
            ts_fprintf(stderr,"PID file '%s' is locked; probably "
                     "'%s' is already running", pidFile, progName);
        fatal("Cannot continue",1);
        fatal("Cannot continue (4)",1);
}
        else{
            ts_fprintf(stderr,"Unable to lock PID file '%s'", pidFile);
    fatal("Cannot continue",1);
    fatal("Cannot continue (5)",1);
}
    }
    if (ftruncate(fd, 0) == -1){
        ts_fprintf(stderr,"Could not truncate PID file '%s'", pidFile);
    fatal("Cannot continue",1);
    fatal("Cannot continue (6)",1);
}
    snprintf(buf, BUF_SIZE, "%ld\n", (long) getpid());
    if (write(fd, buf, strlen(buf)) != strlen(buf)){
        ts_fprintf(stderr,"Writing to PID file '%s'", pidFile);
    fatal("Cannot continue",1);
    fatal("Cannot continue (7)",1);
}
    return fd;
}
src/main.c
@@ -17,6 +17,8 @@
#include "shcomplex.h"
#include "dumpstate.h"
#include "restore.h"
#include <fcntl.h>
/** Entrance function to the program
  * @param argv is a number of parameters used in program call (including the program name
  * @param argc is a pointer to strings (character arrays) which holds the arguments
@@ -28,6 +30,8 @@
    ts_tape *tape;
    ts_uint start_iteration=0;
    force_from_tape=0;
    /* create lock file */
    createPidFile("ts_trisurf",".lock",0);
    parse_args(argv,argc); // sets global variable command_line_args (defined in io.h)
    ts_fprintf(stdout,"TRISURF-NG v. %s, compiled on: %s %s.\n", TS_VERSION, __DATE__, __TIME__);
    ts_fprintf(stdout,"Programming done by: Samo Penic and Miha Fosnaric\n");