On Fri, 19 May 2017 17:39:44 +0100
Anatoly Burakov <[email protected]> wrote:

> This new forked secondary dlopen()'s the original secondary process
> binary and runs main() again. In the meantime, the original secondary
> process waits until this new forked secondary dies, and exits.


You don't have to use a lock file. Just using a pipe for process
standard input and detecting close on process exit is often simpler.

> +static
> +const char *get_run_dir(void) {
> +     const char *dir = "/var/run";
> +     const char *home_dir = getenv("HOME");
> +
> +     if (getuid() != 0 && home_dir != NULL)
> +             dir = home_dir;
> +     return dir;
> +}
> +
> +static
> +void get_rand_str(char *str, int sz) {
> +     char charset[] = 
> "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
> +     for (int i = 0; i < sz - 1; i++) {
> +             // this does not give us *true* randomness but it's good enough
> +             int idx = rand() % sizeof(charset);
> +             str[i] = charset[idx];
> +     }
> +     str[sz - 1] = '\0';
> +}
> +
> +/* we need to know its length */
> +static
> +int get_lock_file_path(char *str, int sz) {
> +     char rand_str[16];
> +
> +     get_rand_str(rand_str, 16);
> +
> +     return snprintf(str, sz, LOCKFILE_PATH_FMT, get_run_dir(),
> +                     internal_config.hugefile_prefix, rand_str);
> +}
> +

Why reinvent all the stuff in mkstemp and friends?

Also don't use C++ style comments in DPDK code.

Reply via email to