Make RB_PEEK_DATA return the address of the data

This makes it a little more generally useful.
This commit is contained in:
Bill Currie 2021-01-22 18:29:35 +09:00
parent 07b869d1bf
commit e6704b85e1
3 changed files with 83 additions and 82 deletions

View file

@ -154,21 +154,22 @@
rb->tail = (t + c) % RB_buffer_size (rb); \ rb->tail = (t + c) % RB_buffer_size (rb); \
}) })
/** Read a single item from the buffer without affecting buffer state. /** Access a single item from the buffer without affecting buffer state.
* *
* \note Does NOT affect buffer state. * \note Does NOT affect buffer state.
* *
* \note Does NOT check that the data is available. It is the caller's * \note Does NOT check that the data is available. It is the caller's
* responsitiblity to do so using RB_DATA_AVAILABLE(). * responsitiblity to do so using RB_DATA_AVAILABLE().
* *
* \param ring_buffer The ring buffer from which to read the object. * \param ring_buffer The ring buffer from which to access the object.
* \param ahead The tail-relative index of the object to read from * \param ahead The tail-relative index of the object to access from
* the buffer. Valid range is 0 to * the buffer. Valid range is 0 to
* `RB_DATA_AVAILABLE() - 1` * `RB_DATA_AVAILABLE() - 1`
* \return Address of the accessed element
*/ */
#define RB_PEEK_DATA(ring_buffer, ahead) \ #define RB_PEEK_DATA(ring_buffer, ahead) \
({ __auto_type rb = &(ring_buffer); \ ({ __auto_type rb = &(ring_buffer); \
rb->buffer[(rb->tail + ahead) % RB_buffer_size (rb)]; \ &rb->buffer[(rb->tail + ahead) % RB_buffer_size (rb)]; \
}) })
/** WRite a single item to the buffer without affecting buffer state. /** WRite a single item to the buffer without affecting buffer state.

View file

@ -273,7 +273,7 @@ qwaq_wait_result (qwaq_resources_t *res, int *result, int cmd, unsigned len)
{ {
pthread_mutex_lock (&res->results_cond.mut); pthread_mutex_lock (&res->results_cond.mut);
while (RB_DATA_AVAILABLE (res->results) < len while (RB_DATA_AVAILABLE (res->results) < len
|| RB_PEEK_DATA (res->results, 0) != cmd) { || *RB_PEEK_DATA (res->results, 0) != cmd) {
pthread_cond_wait (&res->results_cond.rcond, pthread_cond_wait (&res->results_cond.rcond,
&res->results_cond.mut); &res->results_cond.mut);
} }
@ -285,7 +285,7 @@ qwaq_wait_result (qwaq_resources_t *res, int *result, int cmd, unsigned len)
static void static void
cmd_syncprint (qwaq_resources_t *res) cmd_syncprint (qwaq_resources_t *res)
{ {
int string_id = RB_PEEK_DATA (res->command_queue, 2); int string_id = *RB_PEEK_DATA (res->command_queue, 2);
Sys_Printf ("%s\n", res->strings[string_id].str); Sys_Printf ("%s\n", res->strings[string_id].str);
release_string (res, string_id); release_string (res, string_id);
@ -294,10 +294,10 @@ cmd_syncprint (qwaq_resources_t *res)
static void static void
cmd_newwin (qwaq_resources_t *res) cmd_newwin (qwaq_resources_t *res)
{ {
int xpos = RB_PEEK_DATA (res->command_queue, 2); int xpos = *RB_PEEK_DATA (res->command_queue, 2);
int ypos = RB_PEEK_DATA (res->command_queue, 3); int ypos = *RB_PEEK_DATA (res->command_queue, 3);
int xlen = RB_PEEK_DATA (res->command_queue, 4); int xlen = *RB_PEEK_DATA (res->command_queue, 4);
int ylen = RB_PEEK_DATA (res->command_queue, 5); int ylen = *RB_PEEK_DATA (res->command_queue, 5);
window_t *window = window_new (res); window_t *window = window_new (res);
window->win = newwin (ylen, xlen, ypos, xpos); window->win = newwin (ylen, xlen, ypos, xpos);
@ -311,7 +311,7 @@ cmd_newwin (qwaq_resources_t *res)
static void static void
cmd_delwin (qwaq_resources_t *res) cmd_delwin (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
delwin (window->win); delwin (window->win);
@ -321,7 +321,7 @@ cmd_delwin (qwaq_resources_t *res)
static void static void
cmd_getwrect (qwaq_resources_t *res) cmd_getwrect (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int xpos, ypos; int xpos, ypos;
int xlen, ylen; int xlen, ylen;
@ -339,7 +339,7 @@ cmd_getwrect (qwaq_resources_t *res)
static void static void
cmd_new_panel (qwaq_resources_t *res) cmd_new_panel (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
panel_t *panel = panel_new (res); panel_t *panel = panel_new (res);
@ -354,7 +354,7 @@ cmd_new_panel (qwaq_resources_t *res)
static void static void
cmd_del_panel (qwaq_resources_t *res) cmd_del_panel (qwaq_resources_t *res)
{ {
int panel_id = RB_PEEK_DATA (res->command_queue, 2); int panel_id = *RB_PEEK_DATA (res->command_queue, 2);
panel_t *panel = get_panel (res, __FUNCTION__, panel_id); panel_t *panel = get_panel (res, __FUNCTION__, panel_id);
del_panel (panel->panel); del_panel (panel->panel);
@ -364,7 +364,7 @@ cmd_del_panel (qwaq_resources_t *res)
static void static void
cmd_hide_panel (qwaq_resources_t *res) cmd_hide_panel (qwaq_resources_t *res)
{ {
int panel_id = RB_PEEK_DATA (res->command_queue, 2); int panel_id = *RB_PEEK_DATA (res->command_queue, 2);
panel_t *panel = get_panel (res, __FUNCTION__, panel_id); panel_t *panel = get_panel (res, __FUNCTION__, panel_id);
hide_panel (panel->panel); hide_panel (panel->panel);
@ -373,7 +373,7 @@ cmd_hide_panel (qwaq_resources_t *res)
static void static void
cmd_show_panel (qwaq_resources_t *res) cmd_show_panel (qwaq_resources_t *res)
{ {
int panel_id = RB_PEEK_DATA (res->command_queue, 2); int panel_id = *RB_PEEK_DATA (res->command_queue, 2);
panel_t *panel = get_panel (res, __FUNCTION__, panel_id); panel_t *panel = get_panel (res, __FUNCTION__, panel_id);
show_panel (panel->panel); show_panel (panel->panel);
@ -382,7 +382,7 @@ cmd_show_panel (qwaq_resources_t *res)
static void static void
cmd_top_panel (qwaq_resources_t *res) cmd_top_panel (qwaq_resources_t *res)
{ {
int panel_id = RB_PEEK_DATA (res->command_queue, 2); int panel_id = *RB_PEEK_DATA (res->command_queue, 2);
panel_t *panel = get_panel (res, __FUNCTION__, panel_id); panel_t *panel = get_panel (res, __FUNCTION__, panel_id);
top_panel (panel->panel); top_panel (panel->panel);
@ -391,7 +391,7 @@ cmd_top_panel (qwaq_resources_t *res)
static void static void
cmd_bottom_panel (qwaq_resources_t *res) cmd_bottom_panel (qwaq_resources_t *res)
{ {
int panel_id = RB_PEEK_DATA (res->command_queue, 2); int panel_id = *RB_PEEK_DATA (res->command_queue, 2);
panel_t *panel = get_panel (res, __FUNCTION__, panel_id); panel_t *panel = get_panel (res, __FUNCTION__, panel_id);
bottom_panel (panel->panel); bottom_panel (panel->panel);
@ -400,9 +400,9 @@ cmd_bottom_panel (qwaq_resources_t *res)
static void static void
cmd_move_panel (qwaq_resources_t *res) cmd_move_panel (qwaq_resources_t *res)
{ {
int panel_id = RB_PEEK_DATA (res->command_queue, 2); int panel_id = *RB_PEEK_DATA (res->command_queue, 2);
int x = RB_PEEK_DATA (res->command_queue, 3); int x = *RB_PEEK_DATA (res->command_queue, 3);
int y = RB_PEEK_DATA (res->command_queue, 4); int y = *RB_PEEK_DATA (res->command_queue, 4);
panel_t *panel = get_panel (res, __FUNCTION__, panel_id); panel_t *panel = get_panel (res, __FUNCTION__, panel_id);
move_panel (panel->panel, y, x); move_panel (panel->panel, y, x);
@ -411,7 +411,7 @@ cmd_move_panel (qwaq_resources_t *res)
static void static void
cmd_panel_window (qwaq_resources_t *res) cmd_panel_window (qwaq_resources_t *res)
{ {
int panel_id = RB_PEEK_DATA (res->command_queue, 2); int panel_id = *RB_PEEK_DATA (res->command_queue, 2);
panel_t *panel = get_panel (res, __FUNCTION__, panel_id); panel_t *panel = get_panel (res, __FUNCTION__, panel_id);
@ -423,8 +423,8 @@ cmd_panel_window (qwaq_resources_t *res)
static void static void
cmd_replace_panel (qwaq_resources_t *res) cmd_replace_panel (qwaq_resources_t *res)
{ {
int panel_id = RB_PEEK_DATA (res->command_queue, 2); int panel_id = *RB_PEEK_DATA (res->command_queue, 2);
int window_id = RB_PEEK_DATA (res->command_queue, 3); int window_id = *RB_PEEK_DATA (res->command_queue, 3);
panel_t *panel = get_panel (res, __FUNCTION__, panel_id); panel_t *panel = get_panel (res, __FUNCTION__, panel_id);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
@ -447,10 +447,10 @@ cmd_doupdate (qwaq_resources_t *res)
static void static void
cmd_mvwaddstr (qwaq_resources_t *res) cmd_mvwaddstr (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int x = RB_PEEK_DATA (res->command_queue, 3); int x = *RB_PEEK_DATA (res->command_queue, 3);
int y = RB_PEEK_DATA (res->command_queue, 4); int y = *RB_PEEK_DATA (res->command_queue, 4);
int string_id = RB_PEEK_DATA (res->command_queue, 5); int string_id = *RB_PEEK_DATA (res->command_queue, 5);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
mvwaddstr (window->win, y, x, res->strings[string_id].str); mvwaddstr (window->win, y, x, res->strings[string_id].str);
@ -460,8 +460,8 @@ cmd_mvwaddstr (qwaq_resources_t *res)
static void static void
cmd_waddstr (qwaq_resources_t *res) cmd_waddstr (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int string_id = RB_PEEK_DATA (res->command_queue, 3); int string_id = *RB_PEEK_DATA (res->command_queue, 3);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
waddstr (window->win, res->strings[string_id].str); waddstr (window->win, res->strings[string_id].str);
@ -471,10 +471,10 @@ cmd_waddstr (qwaq_resources_t *res)
static void static void
cmd_mvwaddch (qwaq_resources_t *res) cmd_mvwaddch (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int x = RB_PEEK_DATA (res->command_queue, 3); int x = *RB_PEEK_DATA (res->command_queue, 3);
int y = RB_PEEK_DATA (res->command_queue, 4); int y = *RB_PEEK_DATA (res->command_queue, 4);
int ch = RB_PEEK_DATA (res->command_queue, 5); int ch = *RB_PEEK_DATA (res->command_queue, 5);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
mvwaddch (window->win, y, x, ch); mvwaddch (window->win, y, x, ch);
@ -483,8 +483,8 @@ cmd_mvwaddch (qwaq_resources_t *res)
static void static void
cmd_waddch (qwaq_resources_t *res) cmd_waddch (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int ch = RB_PEEK_DATA (res->command_queue, 3); int ch = *RB_PEEK_DATA (res->command_queue, 3);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
waddch (window->win, ch); waddch (window->win, ch);
@ -493,7 +493,7 @@ cmd_waddch (qwaq_resources_t *res)
static void static void
cmd_wrefresh (qwaq_resources_t *res) cmd_wrefresh (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
wrefresh (window->win); wrefresh (window->win);
@ -502,9 +502,9 @@ cmd_wrefresh (qwaq_resources_t *res)
static void static void
cmd_init_pair (qwaq_resources_t *res) cmd_init_pair (qwaq_resources_t *res)
{ {
int pair = RB_PEEK_DATA (res->command_queue, 2); int pair = *RB_PEEK_DATA (res->command_queue, 2);
int f = RB_PEEK_DATA (res->command_queue, 3); int f = *RB_PEEK_DATA (res->command_queue, 3);
int b = RB_PEEK_DATA (res->command_queue, 4); int b = *RB_PEEK_DATA (res->command_queue, 4);
init_pair (pair, f, b); init_pair (pair, f, b);
} }
@ -512,8 +512,8 @@ cmd_init_pair (qwaq_resources_t *res)
static void static void
cmd_wbkgd (qwaq_resources_t *res) cmd_wbkgd (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int ch = RB_PEEK_DATA (res->command_queue, 3); int ch = *RB_PEEK_DATA (res->command_queue, 3);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
wbkgd (window->win, ch); wbkgd (window->win, ch);
@ -522,7 +522,7 @@ cmd_wbkgd (qwaq_resources_t *res)
static void static void
cmd_werase (qwaq_resources_t *res) cmd_werase (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
werase (window->win); werase (window->win);
@ -531,8 +531,8 @@ cmd_werase (qwaq_resources_t *res)
static void static void
cmd_scrollok (qwaq_resources_t *res) cmd_scrollok (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int flag = RB_PEEK_DATA (res->command_queue, 3); int flag = *RB_PEEK_DATA (res->command_queue, 3);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
scrollok (window->win, flag); scrollok (window->win, flag);
@ -541,8 +541,8 @@ cmd_scrollok (qwaq_resources_t *res)
static void static void
cmd_move (qwaq_resources_t *res) cmd_move (qwaq_resources_t *res)
{ {
int x = RB_PEEK_DATA (res->command_queue, 2); int x = *RB_PEEK_DATA (res->command_queue, 2);
int y = RB_PEEK_DATA (res->command_queue, 3); int y = *RB_PEEK_DATA (res->command_queue, 3);
move (y, x); move (y, x);
} }
@ -550,7 +550,7 @@ cmd_move (qwaq_resources_t *res)
static void static void
cmd_curs_set (qwaq_resources_t *res) cmd_curs_set (qwaq_resources_t *res)
{ {
int visibility = RB_PEEK_DATA (res->command_queue, 2); int visibility = *RB_PEEK_DATA (res->command_queue, 2);
curs_set (visibility); curs_set (visibility);
} }
@ -558,15 +558,15 @@ cmd_curs_set (qwaq_resources_t *res)
static void static void
cmd_wborder (qwaq_resources_t *res) cmd_wborder (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int ls = RB_PEEK_DATA (res->command_queue, 3); int ls = *RB_PEEK_DATA (res->command_queue, 3);
int rs = RB_PEEK_DATA (res->command_queue, 4); int rs = *RB_PEEK_DATA (res->command_queue, 4);
int ts = RB_PEEK_DATA (res->command_queue, 5); int ts = *RB_PEEK_DATA (res->command_queue, 5);
int bs = RB_PEEK_DATA (res->command_queue, 6); int bs = *RB_PEEK_DATA (res->command_queue, 6);
int tl = RB_PEEK_DATA (res->command_queue, 7); int tl = *RB_PEEK_DATA (res->command_queue, 7);
int tr = RB_PEEK_DATA (res->command_queue, 8); int tr = *RB_PEEK_DATA (res->command_queue, 8);
int bl = RB_PEEK_DATA (res->command_queue, 9); int bl = *RB_PEEK_DATA (res->command_queue, 9);
int br = RB_PEEK_DATA (res->command_queue, 10); int br = *RB_PEEK_DATA (res->command_queue, 10);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
wborder (window->win, ls, rs, ts, bs, tl, tr, bl, br); wborder (window->win, ls, rs, ts, bs, tl, tr, bl, br);
@ -575,11 +575,11 @@ cmd_wborder (qwaq_resources_t *res)
static void static void
cmd_mvwblit_line (qwaq_resources_t *res) cmd_mvwblit_line (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int x = RB_PEEK_DATA (res->command_queue, 3); int x = *RB_PEEK_DATA (res->command_queue, 3);
int y = RB_PEEK_DATA (res->command_queue, 4); int y = *RB_PEEK_DATA (res->command_queue, 4);
int chs_id = RB_PEEK_DATA (res->command_queue, 5); int chs_id = *RB_PEEK_DATA (res->command_queue, 5);
int len = RB_PEEK_DATA (res->command_queue, 6); int len = *RB_PEEK_DATA (res->command_queue, 6);
int *chs = (int *) res->strings[chs_id].str; int *chs = (int *) res->strings[chs_id].str;
int save_x; int save_x;
int save_y; int save_y;
@ -598,9 +598,9 @@ cmd_mvwblit_line (qwaq_resources_t *res)
static void static void
cmd_wresize (qwaq_resources_t *res) cmd_wresize (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int width = RB_PEEK_DATA (res->command_queue, 3); int width = *RB_PEEK_DATA (res->command_queue, 3);
int height = RB_PEEK_DATA (res->command_queue, 4); int height = *RB_PEEK_DATA (res->command_queue, 4);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
wresize (window->win, height, width); wresize (window->win, height, width);
@ -609,8 +609,8 @@ cmd_wresize (qwaq_resources_t *res)
static void static void
cmd_resizeterm (qwaq_resources_t *res) cmd_resizeterm (qwaq_resources_t *res)
{ {
int width = RB_PEEK_DATA (res->command_queue, 2); int width = *RB_PEEK_DATA (res->command_queue, 2);
int height = RB_PEEK_DATA (res->command_queue, 3); int height = *RB_PEEK_DATA (res->command_queue, 3);
resizeterm (height, width); resizeterm (height, width);
} }
@ -618,11 +618,11 @@ cmd_resizeterm (qwaq_resources_t *res)
static void static void
cmd_mvwhline (qwaq_resources_t *res) cmd_mvwhline (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int x = RB_PEEK_DATA (res->command_queue, 3); int x = *RB_PEEK_DATA (res->command_queue, 3);
int y = RB_PEEK_DATA (res->command_queue, 4); int y = *RB_PEEK_DATA (res->command_queue, 4);
int ch = RB_PEEK_DATA (res->command_queue, 5); int ch = *RB_PEEK_DATA (res->command_queue, 5);
int n = RB_PEEK_DATA (res->command_queue, 6); int n = *RB_PEEK_DATA (res->command_queue, 6);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
mvwhline (window->win, y, x, ch, n); mvwhline (window->win, y, x, ch, n);
@ -631,11 +631,11 @@ cmd_mvwhline (qwaq_resources_t *res)
static void static void
cmd_mvwvline (qwaq_resources_t *res) cmd_mvwvline (qwaq_resources_t *res)
{ {
int window_id = RB_PEEK_DATA (res->command_queue, 2); int window_id = *RB_PEEK_DATA (res->command_queue, 2);
int x = RB_PEEK_DATA (res->command_queue, 3); int x = *RB_PEEK_DATA (res->command_queue, 3);
int y = RB_PEEK_DATA (res->command_queue, 4); int y = *RB_PEEK_DATA (res->command_queue, 4);
int ch = RB_PEEK_DATA (res->command_queue, 5); int ch = *RB_PEEK_DATA (res->command_queue, 5);
int n = RB_PEEK_DATA (res->command_queue, 6); int n = *RB_PEEK_DATA (res->command_queue, 6);
window_t *window = get_window (res, __FUNCTION__, window_id); window_t *window = get_window (res, __FUNCTION__, window_id);
mvwvline (window->win, y, x, ch, n); mvwvline (window->win, y, x, ch, n);
@ -645,13 +645,13 @@ static void
dump_command (qwaq_resources_t *res, int len) dump_command (qwaq_resources_t *res, int len)
{ {
if (0) { if (0) {
qwaq_commands cmd = RB_PEEK_DATA (res->command_queue, 0); qwaq_commands cmd = *RB_PEEK_DATA (res->command_queue, 0);
Sys_Printf ("%s[%d]", qwaq_command_names[cmd], len); Sys_Printf ("%s[%d]", qwaq_command_names[cmd], len);
if (cmd == qwaq_cmd_syncprint) { if (cmd == qwaq_cmd_syncprint) {
Sys_Printf (" "); Sys_Printf (" ");
} else { } else {
for (int i = 2; i < len; i++) { for (int i = 2; i < len; i++) {
Sys_Printf (" %d", RB_PEEK_DATA (res->command_queue, i)); Sys_Printf (" %d", *RB_PEEK_DATA (res->command_queue, i));
} }
Sys_Printf ("\n"); Sys_Printf ("\n");
} }
@ -692,10 +692,10 @@ process_commands (qwaq_resources_t *res)
// as the mutex is not released until after the data has been written to // as the mutex is not released until after the data has been written to
// the buffer. // the buffer.
while ((avail = RB_DATA_AVAILABLE (res->command_queue)) >= 2 while ((avail = RB_DATA_AVAILABLE (res->command_queue)) >= 2
&& avail >= (len = RB_PEEK_DATA (res->command_queue, 1))) { && avail >= (len = *RB_PEEK_DATA (res->command_queue, 1))) {
pthread_mutex_unlock (&res->command_cond.mut); pthread_mutex_unlock (&res->command_cond.mut);
dump_command (res, len); dump_command (res, len);
qwaq_commands cmd = RB_PEEK_DATA (res->command_queue, 0); qwaq_commands cmd = *RB_PEEK_DATA (res->command_queue, 0);
switch (cmd) { switch (cmd) {
case qwaq_cmd_syncprint: case qwaq_cmd_syncprint:
cmd_syncprint (res); cmd_syncprint (res);

View file

@ -185,7 +185,7 @@ qwaq_add_event (qwaq_resources_t *res, qwaq_event_t *event)
pthread_mutex_lock (&res->event_cond.mut); pthread_mutex_lock (&res->event_cond.mut);
unsigned last = RB_DATA_AVAILABLE (res->event_queue); unsigned last = RB_DATA_AVAILABLE (res->event_queue);
if (event->what == qe_mousemove && last > 1 if (event->what == qe_mousemove && last > 1
&& RB_PEEK_DATA(res->event_queue, last - 1).what == qe_mousemove) { && RB_PEEK_DATA(res->event_queue, last - 1)->what == qe_mousemove) {
RB_POKE_DATA(res->event_queue, last - 1, *event); RB_POKE_DATA(res->event_queue, last - 1, *event);
merged = 1; merged = 1;
pthread_cond_broadcast (&res->event_cond.rcond); pthread_cond_broadcast (&res->event_cond.rcond);