[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Sync() and Shutdown system calls



Hi,
here is the missing source file update.c

/* uk: this is the system update daemon, its only purpose is to call
 *     Sync() in regular intervals, so file systems get their sync()
 *     function called.
 */

#include <mintbind.h>

#include "mint.h"

#ifndef Sync    /* temporary hack for gnu c */
#ifdef __GNUC__
#define Sync() (void)(trap_1_w(0x150))
#endif
#endif

long update_stksize = 1024;
long sync_time = 5;


void
do_sync(long sig)
{
	Sync();
}

void
update(long bp)
{
	setstack(bp+256+update_stksize);
	Psignal(SIGALRM, do_sync);
	Psignal(SIGTERM, do_sync);
	Psignal(SIGQUIT, do_sync);
	Psignal(SIGHUP, do_sync);
	Psignal(SIGTSTP, do_sync);
	Psignal(SIGINT, do_sync);
	Psignal(SIGABRT, do_sync);
	Psignal(SIGUSR1, do_sync);
	Psignal(SIGUSR2, do_sync);

	for (;;)
	{
		int tsync;
		tsync = sync_time;
		while (tsync > 32)
		{
			(void)Fselect(32000, 0L, 0L, 0L);
			tsync -= 32;
		}
		if (tsync > 0)
			(void)Fselect(tsync*1000L, 0L, 0L, 0L);
			do_sync(0);
	}
}


/* start a new asynchronous process */
void
start_sysupdate()
{
	BASEPAGE *b;
	int pid;

	b = (BASEPAGE*)p_exec(5, 0L, "", 0L);  /* create basepage */
	(void)m_shrink(0, (virtaddr)b, 256+update_stksize);
	b->p_tbase = (long)update;
	b->p_hitpa = (long)b +256+update_stksize;
	pid = (short)p_exec(104, "sysupdate", b, 0L);
}


Sorry for the inconvenience,
Ulrich

--
+---------------+----------------------------+-----------------------+
| Ulrich Kuehn  | Internet:                  | Life is uncertain --  |
| Cand.Math.Inf | kuehn@math.uni-muenster.de | eat the dessert first |
+---------------+----------------------------+-----------------------+