1
1

fall back to rand() if /dev/random doesn't exist or the read to /dev/random

would block.. 

This commit was SVN r11725.
Этот коммит содержится в:
Galen Shipman 2006-09-20 16:59:44 +00:00
родитель 8895bf7369
Коммит 04e9483aab
2 изменённых файлов: 21 добавлений и 8 удалений

Просмотреть файл

@ -39,10 +39,17 @@
* into the environment of every MPI process when launched. * into the environment of every MPI process when launched.
*/ */
static inline void orte_pre_condition_transports_use_rand(uint64_t* unique_key) {
int pid;
pid = getpid();
srand(pid);
unique_key[1] = rand();
unique_key[2] = rand();
}
int orte_pre_condition_transports(orte_app_context_t **app_context, size_t num_context) int orte_pre_condition_transports(orte_app_context_t **app_context, size_t num_context)
{ {
size_t i; size_t i;
char **env;
char *cs_env; char *cs_env;
int fd_rand; int fd_rand;
uint64_t unique_key[2]; uint64_t unique_key[2];
@ -50,17 +57,23 @@ int orte_pre_condition_transports(orte_app_context_t **app_context, size_t num_c
size_t bytes_read; size_t bytes_read;
/* put the number here - or else create an appropriate string. this just needs to /* put the number here - or else create an appropriate string. this just needs to
* eventually be a string variable * eventually be a string variable
*/ */
fd_rand = open("/dev/random", O_RDONLY); if(-1 == (fd_rand = open("/dev/random", O_RDONLY | O_NONBLOCK))) {
bytes_read = read(fd_rand, (char *) unique_key, 16); orte_pre_condition_transports_use_rand(unique_key);
if(bytes_read != 16) { } else {
opal_output(0,"Open MPI error reading /dev/random for transport pre-conditioning\n"); bytes_read = read(fd_rand, (char *) unique_key, 16);
if(bytes_read != 16) {
orte_pre_condition_transports_use_rand(unique_key);
} else {
close(fd_rand);
}
} }
close(fd_rand);
sprintf(string_key, ORTE_TRANSPORT_KEY_FMT, unique_key[0], unique_key[1]); sprintf(string_key, ORTE_TRANSPORT_KEY_FMT, unique_key[0], unique_key[1]);
string_key[sizeof string_key - 1] = '\0'; string_key[sizeof string_key - 1] = '\0';

Просмотреть файл

@ -26,7 +26,7 @@
#ifndef _ORTE_PRE_CONDITION_TRANSPORTS_H_ #ifndef _ORTE_PRE_CONDITION_TRANSPORTS_H_
#define _ORTE_PRE_CONDITION_TRANSPORTS_H_ #define _ORTE_PRE_CONDITION_TRANSPORTS_H_
#define ORTE_TRANSPORT_KEY_FMT "%016x-%016x" #define ORTE_TRANSPORT_KEY_FMT "%016lx-%016lx"
#define ORTE_TRANSPORT_KEY_LEN 33 /* 16 + sep + 16 */ #define ORTE_TRANSPORT_KEY_LEN 33 /* 16 + sep + 16 */
#include "orte_config.h" #include "orte_config.h"