supports priorities. Update synchronization used to rely on them,
which naturally worked only with LWP (#
1504036). With that fixed, no
uses of priorities remained, but a minor bug did: players could starve
out threads with priorities below PP_PLAYER, i.e. delete_lostitems()
and player_kill_idle(). Closes #
1458175:
(empth_create): Remove parameter prio. Callers changed. Also gets
rid of misleading comments in pthread.c and ntthread.c.
(PP_MAIN, PP_UPDATE, PP_SHUTDOWN, PP_SCHED, PP_TIMESTAMP, PP_PLAYER)
(PP_ACCEPT, PP_KILLIDLE): Remove.
(empth_init, empth_create) [EMPTH_LWP]: Pass priority 1.
#include <time.h>
-/* thread priorities */
-enum {
- PP_MAIN = 7,
- PP_UPDATE = 6,
- PP_SHUTDOWN = 5,
- PP_SCHED = 4,
- PP_TIMESTAMP = 2,
- PP_PLAYER = 3,
- PP_ACCEPT = 3,
- PP_KILLIDLE = 2
-};
-
#ifdef EMPTH_LWP
#include "lwp.h"
/*
* Create a new thread.
- * PRIO is the scheduling priority.
* ENTRY is the entry point. It will be called with argument UD.
* Thread stack is at least SIZE bytes.
* FLAGS should be the same as were passed to empth_init(), or zero.
* Yield the processor.
* Return the thread, or NULL on error.
*/
-empth_t *empth_create(int prio, void (*entry)(void *),
+empth_t *empth_create(void (*entry)(void *),
int size, int flags, char *name, void *ud);
/*
sigaddset(&set, SIGHUP);
sigaddset(&set, SIGINT);
sigaddset(&set, SIGTERM);
- lwpInitSystem(PP_MAIN, ctx, flags, &set);
+ lwpInitSystem(1, ctx, flags, &set);
return 0;
}
empth_t *
-empth_create(int prio, void (*entry)(void *), int size, int flags,
+empth_create(void (*entry)(void *), int size, int flags,
char *name, void *ud)
{
if (!flags)
flags = empth_flags;
- return lwpCreate(prio, entry, size, flags, name, 0, 0, ud);
+ return lwpCreate(1, entry, size, flags, name, 0, 0, ud);
}
empth_t *
*
* Create a new thread.
*
- * prio - priority, not particularly useful in our context.
* entry - entry point function for thread.
* size - stack size.
* flags - debug control.
* It is also passed to the entry function...
*/
empth_t *
-empth_create(int prio, void (*entry)(void *), int size, int flags,
+empth_create(void (*entry)(void *), int size, int flags,
char *name, void *ud)
{
empth_t *pThread = NULL;
}
-/*
- * prio can be used for setting scheeduling policy but...
- * it seems to be optional in POSIX threads and Solaris
- * for example just ignores it.
- * More then that priority is not needed even in lwp threads.
- */
empth_t *
-empth_create(int prio, void (*entry)(void *), int size, int flags,
+empth_create(void (*entry)(void *), int size, int flags,
char *name, void *ud)
{
pthread_t t;
/* budget */ + MAX(WORLD_X * WORLD_Y / 2 * sizeof(int) * 7,
/* power */ MAXNOC * sizeof(struct powstr));
sprintf(buf, "Player (fd #%d)", ns);
- empth_create(PP_PLAYER, player_login, stacksize,
- 0, buf, np);
+ empth_create(player_login, stacksize, 0, buf, np);
}
}
if (journal_startup() < 0)
exit(1);
- empth_create(PP_ACCEPT, player_accept, (50 * 1024), flags,
- "AcceptPlayers", 0);
- empth_create(PP_KILLIDLE, player_kill_idle, (50 * 1024), flags,
- "KillIdle", 0);
- empth_create(PP_TIMESTAMP, delete_lostitems, (50 * 1024), flags,
- "DeleteItems", 0);
+ empth_create(player_accept, 50 * 1024, flags, "AcceptPlayers", 0);
+ empth_create(player_kill_idle, 50 * 1024, flags, "KillIdle", 0);
+ empth_create(delete_lostitems, 50 * 1024, flags, "DeleteItems", 0);
market_init();
update_init();
dp = player_new(-1);
if (!dp)
exit_nomem();
- if (!empth_create(PP_UPDATE, market_update, 50 * 1024, 0,
- "MarketUpdate", dp))
+ if (!empth_create(market_update, 50 * 1024, 0, "MarketUpdate", dp))
exit_nomem();
}
mins_from_now);
/* FIXME wake up shutdown_sequence() */
} else {
- if (!empth_create(PP_SHUTDOWN, shutdown_sequence, 50 * 1024, 0,
+ if (!empth_create(shutdown_sequence, 50 * 1024, 0,
"shutdownSeq", NULL))
return -1;
}
stacksize = 100000 +
/* finish_sects */ WORLD_X * WORLD_Y * (2 * sizeof(double) +
sizeof(char *));
- update_thread = empth_create(PP_UPDATE, update_sched, stacksize, 0,
+ update_thread = empth_create(update_sched, stacksize, 0,
"Update", dp);
if (!update_thread)
exit_nomem();