Updated disk watcher

This commit is contained in:
Michiel Broek 2004-03-22 11:35:47 +00:00
parent 78ff7582af
commit d663640948
3 changed files with 54 additions and 17 deletions

4
TODO
View File

@ -35,8 +35,6 @@ libdiesel.a:
processed, instead the previous macro value will be returned. processed, instead the previous macro value will be returned.
mbsebbs: mbsebbs:
N: Test with valgrind.
X: Better word wrapping or paragraph justification in editor. X: Better word wrapping or paragraph justification in editor.
X: E-mail downloads with e-mail verification. X: E-mail downloads with e-mail verification.
@ -67,8 +65,6 @@ mbsebbs:
N: There are some bugs in the bbs list menu. Make it a door? N: There are some bugs in the bbs list menu. Make it a door?
newuser: newuser:
N: Test with valgrind.
L: Allow handles to be the same as the unixname. L: Allow handles to be the same as the unixname.
N: Add menu setup to set users preffered character set. N: Add menu setup to set users preffered character set.

View File

@ -159,6 +159,7 @@ void load_ports()
} }
} }
} }
free(q);
Syslog('+', "Found line %s, %s", new.tty, capflags); Syslog('+', "Found line %s, %s", new.tty, capflags);
fill_portlist(&pl, &new); fill_portlist(&pl, &new);

View File

@ -47,6 +47,7 @@ mfs_list *mfs = NULL; /* List of filesystems */
int disk_reread = FALSE; /* Reread tables */ int disk_reread = FALSE; /* Reread tables */
extern int T_Shutdown; /* Program shutdown */ extern int T_Shutdown; /* Program shutdown */
int disk_run = FALSE; /* Thread running */ int disk_run = FALSE; /* Thread running */
int recursecount = 0; /* Recurse counter */
pthread_mutex_t a_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t a_mutex = PTHREAD_MUTEX_INITIALIZER;
@ -219,17 +220,13 @@ char *disk_getfs()
/* /*
* Update disk useage status. * Update disk useage status. The calling function must lock the mutex!
*/ */
void update_diskstat(void) void update_diskstat(void)
{ {
struct statfs sfs; struct statfs sfs;
unsigned long temp; unsigned long temp;
mfs_list *tmp; mfs_list *tmp;
int rc;
if ((rc = pthread_mutex_lock(&a_mutex)))
Syslog('!', "update_diskstat() mutex_lock failed rc=%d", rc);
for (tmp = mfs; tmp; tmp = tmp->next) { for (tmp = mfs; tmp; tmp = tmp->next) {
if (statfs(tmp->mountpoint, &sfs) == 0) { if (statfs(tmp->mountpoint, &sfs) == 0) {
@ -244,14 +241,13 @@ void update_diskstat(void)
*/ */
tmp->ro = (strstr(tmp->fstype, "iso") != NULL); tmp->ro = (strstr(tmp->fstype, "iso") != NULL);
#elif defined(__FreeBSD__) || defined(__NetBSD__) #elif defined(__FreeBSD__) || defined(__NetBSD__)
tmp->ro = (sfs.f_flags & MNT_RDONLY); /*
// Syslog('-', "%s %d %d", tmp->mountpoint, sfs.f_flags, sfs.f_flags & MNT_RDONLY); * XxxxBSD has the info in the statfs structure.
*/
tmp->ro = (sfs.f_flags & MNT_RDONLY);
#endif #endif
} }
} }
if ((rc = pthread_mutex_unlock(&a_mutex)))
Syslog('!', "update_diskstat() mutex_unlock failed rc=%d", rc);
} }
@ -278,6 +274,16 @@ void add_path(char *path)
return; return;
} }
/*
* Safety recursive call count.
*/
recursecount++;
if (recursecount > 2) {
Syslog('!', "add_path(%s), too many recursive calls", path);
recursecount--;
return;
}
Syslog('d', "add_path(%s)", path); Syslog('d', "add_path(%s)", path);
if (lstat(path, &sb) == 0) { if (lstat(path, &sb) == 0) {
if (S_ISDIR(sb.st_mode)) { if (S_ISDIR(sb.st_mode)) {
@ -305,7 +311,6 @@ void add_path(char *path)
} }
fclose(fp); fclose(fp);
free(mtab); free(mtab);
Syslog('d', "Should be on \"%s\" \"%s\"", fsname, fstype);
fill_mfslist(&mfs, fsname, fstype); fill_mfslist(&mfs, fsname, fstype);
free(fsname); free(fsname);
free(fstype); free(fstype);
@ -323,7 +328,6 @@ void add_path(char *path)
sprintf(fstype, "%s", mntbuf[i].f_fstypename); sprintf(fstype, "%s", mntbuf[i].f_fstypename);
} }
} }
Syslog('d', "Should be on \"%s\" \"%s\"", fsname, fstype);
fill_mfslist(&mfs, fsname, fstype); fill_mfslist(&mfs, fsname, fstype);
free(fsname); free(fsname);
free(fstype); free(fstype);
@ -353,6 +357,7 @@ void add_path(char *path)
Syslog('d', "Recursive add name %s", path); Syslog('d', "Recursive add name %s", path);
add_path(path); add_path(path);
} }
recursecount--;
} }
@ -417,6 +422,9 @@ void *disk_thread(void)
fclose(fp); fclose(fp);
} }
if (T_Shutdown)
break;
sprintf(temp, "%s/etc/mareas.data", getenv("MBSE_ROOT")); sprintf(temp, "%s/etc/mareas.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) { if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp); Syslog('d', "+ %s", temp);
@ -431,6 +439,9 @@ void *disk_thread(void)
fclose(fp); fclose(fp);
} }
if (T_Shutdown)
break;
sprintf(temp, "%s/etc/language.data", getenv("MBSE_ROOT")); sprintf(temp, "%s/etc/language.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) { if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp); Syslog('d', "+ %s", temp);
@ -447,6 +458,9 @@ void *disk_thread(void)
fclose(fp); fclose(fp);
} }
if (T_Shutdown)
break;
sprintf(temp, "%s/etc/nodes.data", getenv("MBSE_ROOT")); sprintf(temp, "%s/etc/nodes.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) { if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp); Syslog('d', "+ %s", temp);
@ -464,6 +478,9 @@ void *disk_thread(void)
fclose(fp); fclose(fp);
} }
if (T_Shutdown)
break;
sprintf(temp, "%s/etc/fgroups.data", getenv("MBSE_ROOT")); sprintf(temp, "%s/etc/fgroups.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) { if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp); Syslog('d', "+ %s", temp);
@ -477,6 +494,9 @@ void *disk_thread(void)
fclose(fp); fclose(fp);
} }
if (T_Shutdown)
break;
sprintf(temp, "%s/etc/mgroups.data", getenv("MBSE_ROOT")); sprintf(temp, "%s/etc/mgroups.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) { if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp); Syslog('d', "+ %s", temp);
@ -490,6 +510,9 @@ void *disk_thread(void)
fclose(fp); fclose(fp);
} }
if (T_Shutdown)
break;
sprintf(temp, "%s/etc/hatch.data", getenv("MBSE_ROOT")); sprintf(temp, "%s/etc/hatch.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) { if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp); Syslog('d', "+ %s", temp);
@ -503,6 +526,9 @@ void *disk_thread(void)
fclose(fp); fclose(fp);
} }
if (T_Shutdown)
break;
sprintf(temp, "%s/etc/magic.data", getenv("MBSE_ROOT")); sprintf(temp, "%s/etc/magic.data", getenv("MBSE_ROOT"));
if ((fp = fopen(temp, "r"))) { if ((fp = fopen(temp, "r"))) {
Syslog('d', "+ %s", temp); Syslog('d', "+ %s", temp);
@ -518,18 +544,32 @@ void *disk_thread(void)
free(temp); free(temp);
Syslog('d', "All directories added"); Syslog('d', "All directories added");
/*
* Now update the new table with filesystems information. This must
* be done before we unlock the mutex so that waiting clients get
* usefull information.
*/
update_diskstat();
for (tmp = mfs; tmp; tmp = tmp->next) { for (tmp = mfs; tmp; tmp = tmp->next) {
Syslog('+', "Found filesystem: %s type: %s", tmp->mountpoint, tmp->fstype); Syslog('+', "Found filesystem: %s type: %s status: %s", tmp->mountpoint, tmp->fstype, tmp->ro ?"RO":"RW");
} }
if ((rc = pthread_mutex_unlock(&a_mutex))) if ((rc = pthread_mutex_unlock(&a_mutex)))
Syslog('!', "disk_thread() mutex_unlock failed rc=%d", rc); Syslog('!', "disk_thread() mutex_unlock failed rc=%d", rc);
} }
if ((rc = pthread_mutex_lock(&a_mutex)))
Syslog('!', "disk_thread() mutex_lock failed rc=%d", rc);
update_diskstat(); update_diskstat();
if ((rc = pthread_mutex_unlock(&a_mutex)))
Syslog('!', "disk_thread() mutex_unlock failed rc=%d", rc);
sleep(1); sleep(1);
} }
tidy_mfslist(&mfs);
disk_run = FALSE; disk_run = FALSE;
Syslog('+', "Disk thread stopped"); Syslog('+', "Disk thread stopped");
pthread_exit(NULL); pthread_exit(NULL);