suppression double close dans init_blockchain

This commit is contained in:
2020-07-15 10:51:57 +02:00
parent 9e67f611ff
commit bc3b05e92b
9 changed files with 38 additions and 22 deletions
+1
View File
@@ -0,0 +1 @@
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 0
+1
View File
@@ -2,5 +2,6 @@
#define __MY_DAEMONIZE_H__ #define __MY_DAEMONIZE_H__
void daemonize(); void daemonize();
void log_signal_message(char*, char*);
#endif #endif
+31 -18
View File
@@ -10,7 +10,7 @@
#define RUNNING_DIR "/tmp" #define RUNNING_DIR "/tmp"
#define LOCK_FILE "/tmp/daemond.lock" #define LOCK_FILE "/tmp/daemond.lock"
#define LOG_FILE "daemond.log" #define LOG_FILE "/tmp/daemond.log"
/* /*
* daemon.c * daemon.c
@@ -33,35 +33,48 @@
* MA 02110-1301, USA. * MA 02110-1301, USA.
*/ */
void log_signal_message(char *filename,char *message){
FILE *logfile;
logfile = fopen(filename,"a");
if(!logfile) return;
fprintf(logfile,"%s",message);
fclose(logfile);
}
int lfp;
void close_lock_file()
{
close(lfp);
remove(LOCK_FILE);
}
void daemonize(){ void daemonize(){
int i,lfp; int pid;
int i;
char str[10]; char str[10];
if(getppid() == 1) pid = getppid();
return; if(pid == 1) return;
i = fork(); pid = fork();
if(pid < 0) exit(1);
if(pid > 0) exit(0);
if(i < 0)
exit(1);
if(i > 0)
exit(0);
setsid(); setsid();
for(i = getdtablesize(); i >= 0; --i) for(i = getdtablesize(); i >= 0; --i) close(i);
close(i);
i = open("/dev/null",O_RDWR); lfp = open("/dev/null",O_RDWR);
dup(i); dup(lfp);
dup(i); dup(lfp);
umask(022); umask(022);
lfp = open(LOCK_FILE,O_RDWR|O_CREAT,0640); lfp = open(LOCK_FILE,O_RDWR|O_CREAT,0640);
if(lfp < 0) if(lfp < 0) exit(1);
exit(1); if(lockf(lfp,F_TLOCK,0) < 0) exit(1);
if(lockf(lfp,F_TLOCK,0) < 0)
exit(1);
sprintf(str,"%d\n",getpid()); sprintf(str,"%d\n",getpid());
write(lfp,str,strlen(str)); write(lfp,str,strlen(str));
atexit(close_lock_file);
} }
-3
View File
@@ -692,9 +692,6 @@ int init_blockchain_file()
request_headers_or_blocks_hash_init = true; request_headers_or_blocks_hash_init = true;
cb_handshake_done_bestknownheight = block_height; cb_handshake_done_bestknownheight = block_height;
fclose(blockchain_fd);
blockchain_fd = NULL;
} }
} }
+4
View File
@@ -14,6 +14,10 @@
* Les outils * Les outils
*/ */
static void signal_handler(int sig){ static void signal_handler(int sig){
char msg[200];
sprintf(msg,"process %d signal %d trapped\n", getpid(), sig);
log_signal_message("/tmp/daemonize.log", msg);
switch(sig){ switch(sig){
case SIGUSR1: case SIGUSR1:
// signal USR1 // signal USR1