File: threadlog.cc

package info (click to toggle)
autodocksuite 4.2.6-9
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 97,028 kB
  • sloc: cpp: 24,257; sh: 4,419; python: 1,261; makefile: 627; perl: 15
file content (88 lines) | stat: -rw-r--r-- 2,368 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/* thread-safe log file utility functions - M Pique, 2014 */

/*

 $Id: threadlog.cc,v 1.2 2014/06/12 01:44:08 mp Exp $

 AutoDock 

Copyright (C) 2009 The Scripps Research Institute. All rights reserved.

 AutoDock is a Trade Mark of The Scripps Research Institute.

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "threadlog.h"
#include "constants.h"
#include "stop.h"
/* include stdlib.h for "free" and unistd.h for "unlink"  */ 
/* tempnam is in <stdio.h>  */
#include <stdlib.h>
#include <unistd.h>

static char *tfilename[MAX_RUNS];
static FILE *tfileptr[MAX_RUNS];

FILE *
threadLogOpen(int j)
{
	// note that tempnam does its own malloc() and is thread-safe MPique
	tfilename[j] = tempnam(NULL, "autod");
	tfileptr[j] = fopen(tfilename[j], "w");

	if(NULL==tfileptr[j]) stop("cannot allocate or open temp log file");
	return tfileptr[j];
	}
void
threadLogClose(int j) {
	if(NULL==tfileptr[j]) stop("closing non-open temp log file");
	fclose(tfileptr[j]);
	}
void
threadLogConcat(FILE * logFile, int j) {
	int c;
	FILE * tmpfd = fopen(tfilename[j], "r");
	if(NULL==tmpfd) stop("cannot obtain new fd to concatenate log file");
	fflush(logFile);
	while( EOF != (c=getc(tmpfd)) ) putc(c, logFile);
	fflush(logFile);
	fclose(tmpfd);
	}
void
threadLogFree(int j) {
	if(NULL==tfileptr[j]) stop("freeing non-active temp log file");
#pragma omp critical
{
	unlink(tfilename[j]);
	free(tfilename[j]);
	tfileptr[j]=NULL;
}
	}
void
threadLogFreeAll(void) {
	// for emergency cleanup of the temporary files on abnormal exit
   for(int j=0;j<MAX_RUNS;j++) {
	if(NULL==tfileptr[j]) continue;
	unlink(tfilename[j]);
	//free(tfilename[j]);
	//tfileptr[j]=NULL;
   }
}