#include <unistd.h>
#include "misc.h"
#include "empthread.h"
+#include "file.h"
#include "prototypes.h"
struct empth_t {
int eno;
empth_status("creating new thread %s", name);
+ ef_make_stale();
ctx = malloc(sizeof(empth_t));
if (!ctx) {
empth_t *ctx = pthread_getspecific(ctx_key);
empth_status("empth_exit");
+ ef_make_stale();
pthread_mutex_unlock(&mtx_ctxsw);
free(ctx->name);
free(ctx);
void
empth_yield(void)
{
+ ef_make_stale();
pthread_mutex_unlock(&mtx_ctxsw);
pthread_mutex_lock(&mtx_ctxsw);
empth_restorectx();
empth_t *ctx;
int res = 0;
+ ef_make_stale();
pthread_mutex_unlock(&mtx_ctxsw);
empth_status("select on %d for %d", fd, flags);
struct timeval tv;
int res;
+ ef_make_stale();
pthread_mutex_unlock(&mtx_ctxsw);
do {
now = time(NULL);
sigset_t set;
int sig, err;
+ ef_make_stale();
sigemptyset(&set);
sigaddset(&set, SIGHUP);
sigaddset(&set, SIGINT);
{
empth_status("wrlock %s %d %d",
rwlock->name, rwlock->nread, rwlock->nwrite);
+ ef_make_stale();
rwlock->nwrite++;
while (rwlock->nread != 0 || rwlock->nwrite != 1) {
empth_status("waiting for wrlock %s", rwlock->name);
{
empth_status("rdlock %s %d %d",
rwlock->name, rwlock->nread, rwlock->nwrite);
+ ef_make_stale();
while (rwlock->nwrite) {
empth_status("waiting for rdlock %s", rwlock->name);
pthread_cond_wait(&rwlock->can_read, &mtx_ctxsw);