Skip to content
Snippets Groups Projects
Commit 2fec78bd authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Put assert()s around all the locking in bitmap_con.c

parent c25141c9
No related branches found
No related tags found
No related merge requests found
Pipeline #7746 passed
...@@ -67,6 +67,24 @@ static int dbg_pthread_mutex_trylock(pthread_mutex_t *lptr, unsigned line) ...@@ -67,6 +67,24 @@ static int dbg_pthread_mutex_trylock(pthread_mutex_t *lptr, unsigned line)
#define pthread_mutex_unlock(a) dbg_pthread_mutex_unlock(a, __LINE__) #define pthread_mutex_unlock(a) dbg_pthread_mutex_unlock(a, __LINE__)
#define pthread_mutex_trylock(a) dbg_pthread_trymutex_lock(a, __LINE__) #define pthread_mutex_trylock(a) dbg_pthread_trymutex_lock(a, __LINE__)
#else
#ifndef NDEBUG
#define pthread_mutex_lock(a) assert(pthread_mutex_lock(a) == 0)
#define pthread_mutex_unlock(a) assert(pthread_mutex_unlock(a) == 0)
#define pthread_mutex_trylock(a) assert(pthread_mutex_trylock(a) == 0)
#endif
#endif
#ifdef NDEBUG
#define do_rwlock_rdlock(lk) rwlock_rdlock(lk)
#define do_rwlock_wrlock(lk) rwlock_wrlock(lk)
#define do_rwlock_unlock(lk) rwlock_unlock(lk)
#define do_rwlock_init(lk) rwlock_init(lk)
#else
#define do_rwlock_rdlock(lk) assert(rwlock_rdlock(lk))
#define do_rwlock_wrlock(lk) assert(rwlock_wrlock(lk))
#define do_rwlock_unlock(lk) assert(rwlock_unlock(lk))
#define do_rwlock_init(lk) assert(rwlock_init(lk))
#endif #endif
/* Structs */ /* Structs */
...@@ -390,7 +408,7 @@ static void cb_drawrect(struct rectlist *data) ...@@ -390,7 +408,7 @@ static void cb_drawrect(struct rectlist *data)
* 4) If vstat.curs_blinks is false, the cursor does not blink. * 4) If vstat.curs_blinks is false, the cursor does not blink.
* 5) When blinking, the cursor is shown when vstat.blink is true. * 5) When blinking, the cursor is shown when vstat.blink is true.
*/ */
rwlock_rdlock(&vstatlock); do_rwlock_rdlock(&vstatlock);
curs_start = vstat.curs_start; curs_start = vstat.curs_start;
curs_end = vstat.curs_end; curs_end = vstat.curs_end;
curs_row = vstat.curs_row; curs_row = vstat.curs_row;
...@@ -398,7 +416,7 @@ static void cb_drawrect(struct rectlist *data) ...@@ -398,7 +416,7 @@ static void cb_drawrect(struct rectlist *data)
charheight = vstat.charheight; charheight = vstat.charheight;
charwidth = vstat.charwidth; charwidth = vstat.charwidth;
if (cursor_visible_locked()) { if (cursor_visible_locked()) {
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
cv = color_value(ciolib_fg); cv = color_value(ciolib_fg);
for (y = curs_start; y <= curs_end; y++) { for (y = curs_start; y <= curs_end; y++) {
pixel = &data->data[((curs_row - 1) * charheight + y) * data->rect.width + (curs_col - 1) * charwidth]; pixel = &data->data[((curs_row - 1) * charheight + y) * data->rect.width + (curs_col - 1) * charwidth];
...@@ -408,7 +426,7 @@ static void cb_drawrect(struct rectlist *data) ...@@ -408,7 +426,7 @@ static void cb_drawrect(struct rectlist *data)
} }
} }
else else
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
pthread_mutex_lock(&callbacks.lock); pthread_mutex_lock(&callbacks.lock);
callbacks.drawrect(data); callbacks.drawrect(data);
callbacks.rects++; callbacks.rects++;
...@@ -422,9 +440,9 @@ static void request_redraw_locked(void) ...@@ -422,9 +440,9 @@ static void request_redraw_locked(void)
static void request_redraw(void) static void request_redraw(void)
{ {
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
request_redraw_locked(); request_redraw_locked();
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
} }
/* /*
...@@ -908,10 +926,10 @@ static int check_redraw(void) ...@@ -908,10 +926,10 @@ static int check_redraw(void)
{ {
int ret; int ret;
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
ret = force_redraws; ret = force_redraws;
force_redraws = 0; force_redraws = 0;
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return ret; return ret;
} }
...@@ -936,7 +954,7 @@ bpid = pthread_self(); ...@@ -936,7 +954,7 @@ bpid = pthread_self();
SLEEP(10); SLEEP(10);
count++; count++;
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
if (count==25) { if (count==25) {
curs_changed = cursor_visible_locked(); curs_changed = cursor_visible_locked();
if(vstat.curs_blink) if(vstat.curs_blink)
...@@ -962,7 +980,7 @@ bpid = pthread_self(); ...@@ -962,7 +980,7 @@ bpid = pthread_self();
lfc = force_cursor; lfc = force_cursor;
force_cursor = 0; force_cursor = 0;
blink = vstat.blink; blink = vstat.blink;
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
if (check_redraw()) { if (check_redraw()) {
if (update_from_vmem(TRUE)) if (update_from_vmem(TRUE))
...@@ -1081,15 +1099,15 @@ static int update_from_vmem(int force) ...@@ -1081,15 +1099,15 @@ static int update_from_vmem(int force)
if(!bitmap_initialized) if(!bitmap_initialized)
return(-1); return(-1);
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
if (vstat.vmem == NULL) { if (vstat.vmem == NULL) {
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return -1; return -1;
} }
if(vstat.vmem->vmem == NULL) { if(vstat.vmem->vmem == NULL) {
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return -1; return -1;
} }
...@@ -1100,7 +1118,7 @@ static int update_from_vmem(int force) ...@@ -1100,7 +1118,7 @@ static int update_from_vmem(int force)
vs.cols = 0; vs.cols = 0;
vs.rows = 0; vs.rows = 0;
free(bitmap_drawn); free(bitmap_drawn);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return -1; return -1;
} }
bitmap_drawn = newl; bitmap_drawn = newl;
...@@ -1165,7 +1183,7 @@ static int update_from_vmem(int force) ...@@ -1165,7 +1183,7 @@ static int update_from_vmem(int force)
} }
release_vmem(vmem_ptr); release_vmem(vmem_ptr);
vs = vstat; vs = vstat;
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return(0); return(0);
} }
...@@ -1197,7 +1215,7 @@ int bitmap_puttext(int sx, int sy, int ex, int ey, void *fill) ...@@ -1197,7 +1215,7 @@ int bitmap_puttext(int sx, int sy, int ex, int ey, void *fill)
return(0); return(0);
} }
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
vmem_ptr = get_vmem(&vstat); vmem_ptr = get_vmem(&vstat);
for (y = sy - 1; y < ey; y++) { for (y = sy - 1; y < ey; y++) {
for (x = sx - 1; x < ex; x++) { for (x = sx - 1; x < ex; x++) {
...@@ -1205,7 +1223,7 @@ int bitmap_puttext(int sx, int sy, int ex, int ey, void *fill) ...@@ -1205,7 +1223,7 @@ int bitmap_puttext(int sx, int sy, int ex, int ey, void *fill)
} }
} }
release_vmem(vmem_ptr); release_vmem(vmem_ptr);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return ret; return ret;
} }
...@@ -1214,9 +1232,9 @@ bitmap_vmem_puttext(int sx, int sy, int ex, int ey, struct vmem_cell *fill) ...@@ -1214,9 +1232,9 @@ bitmap_vmem_puttext(int sx, int sy, int ex, int ey, struct vmem_cell *fill)
{ {
int ret; int ret;
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
ret = bitmap_vmem_puttext_locked(sx, sy, ex, ey, fill); ret = bitmap_vmem_puttext_locked(sx, sy, ex, ey, fill);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return ret; return ret;
} }
...@@ -1240,7 +1258,7 @@ int bitmap_vmem_gettext(int sx, int sy, int ex, int ey, struct vmem_cell *fill) ...@@ -1240,7 +1258,7 @@ int bitmap_vmem_gettext(int sx, int sy, int ex, int ey, struct vmem_cell *fill)
return(0); return(0);
} }
rwlock_rdlock(&vstatlock); do_rwlock_rdlock(&vstatlock);
vmem_ptr = get_vmem(&vstat); vmem_ptr = get_vmem(&vstat);
for(y=sy-1;y<ey;y++) { for(y=sy-1;y<ey;y++) {
struct vmem_cell *vc = vmem_cell_ptr(vmem_ptr, sx - 1, y); struct vmem_cell *vc = vmem_cell_ptr(vmem_ptr, sx - 1, y);
...@@ -1250,7 +1268,7 @@ int bitmap_vmem_gettext(int sx, int sy, int ex, int ey, struct vmem_cell *fill) ...@@ -1250,7 +1268,7 @@ int bitmap_vmem_gettext(int sx, int sy, int ex, int ey, struct vmem_cell *fill)
} }
} }
release_vmem(vmem_ptr); release_vmem(vmem_ptr);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return(1); return(1);
} }
...@@ -1259,7 +1277,7 @@ void bitmap_gotoxy(int x, int y) ...@@ -1259,7 +1277,7 @@ void bitmap_gotoxy(int x, int y)
if(!bitmap_initialized) if(!bitmap_initialized)
return; return;
/* Move cursor location */ /* Move cursor location */
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
if (vstat.curs_col != x + cio_textinfo.winleft - 1 || vstat.curs_row != y + cio_textinfo.wintop - 1) { if (vstat.curs_col != x + cio_textinfo.winleft - 1 || vstat.curs_row != y + cio_textinfo.wintop - 1) {
cio_textinfo.curx=x; cio_textinfo.curx=x;
cio_textinfo.cury=y; cio_textinfo.cury=y;
...@@ -1268,14 +1286,14 @@ void bitmap_gotoxy(int x, int y) ...@@ -1268,14 +1286,14 @@ void bitmap_gotoxy(int x, int y)
if (cursor_visible_locked()) if (cursor_visible_locked())
force_cursor = 1; force_cursor = 1;
} }
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
} }
void bitmap_setcursortype(int type) void bitmap_setcursortype(int type)
{ {
if(!bitmap_initialized) if(!bitmap_initialized)
return; return;
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
switch(type) { switch(type) {
case _NOCURSOR: case _NOCURSOR:
vstat.curs_start=0xff; vstat.curs_start=0xff;
...@@ -1292,7 +1310,7 @@ void bitmap_setcursortype(int type) ...@@ -1292,7 +1310,7 @@ void bitmap_setcursortype(int type)
force_cursor = 1; force_cursor = 1;
break; break;
} }
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
} }
int bitmap_setfont(int font, int force, int font_num) int bitmap_setfont(int font, int force, int font_num)
...@@ -1320,7 +1338,7 @@ int bitmap_setfont(int font, int force, int font_num) ...@@ -1320,7 +1338,7 @@ int bitmap_setfont(int font, int force, int font_num)
else if(conio_fontdata[font].eight_by_eight!=NULL) else if(conio_fontdata[font].eight_by_eight!=NULL)
newmode=C80X50; newmode=C80X50;
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
switch(vstat.charheight) { switch(vstat.charheight) {
case 8: case 8:
if(conio_fontdata[font].eight_by_eight==NULL) { if(conio_fontdata[font].eight_by_eight==NULL) {
...@@ -1378,7 +1396,7 @@ int bitmap_setfont(int font, int force, int font_num) ...@@ -1378,7 +1396,7 @@ int bitmap_setfont(int font, int force, int font_num)
new=malloc(ti.screenwidth*ti.screenheight*sizeof(*new)); new=malloc(ti.screenwidth*ti.screenheight*sizeof(*new));
if(!new) { if(!new) {
free(old); free(old);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return 0; return 0;
} }
pold=old; pold=old;
...@@ -1424,11 +1442,11 @@ int bitmap_setfont(int font, int force, int font_num) ...@@ -1424,11 +1442,11 @@ int bitmap_setfont(int font, int force, int font_num)
} }
} }
bitmap_loadfont_locked(NULL); bitmap_loadfont_locked(NULL);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return(1); return(1);
error_return: error_return:
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return(0); return(0);
} }
...@@ -1450,9 +1468,9 @@ int bitmap_loadfont(const char *filename) ...@@ -1450,9 +1468,9 @@ int bitmap_loadfont(const char *filename)
{ {
int ret; int ret;
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
ret = bitmap_loadfont_locked(filename); ret = bitmap_loadfont_locked(filename);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return ret; return ret;
} }
...@@ -1556,7 +1574,7 @@ int bitmap_movetext(int x, int y, int ex, int ey, int tox, int toy) ...@@ -1556,7 +1574,7 @@ int bitmap_movetext(int x, int y, int ex, int ey, int tox, int toy)
int oheight = height; int oheight = height;
bool oscrolldown = scrolldown; bool oscrolldown = scrolldown;
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
vmem_ptr = get_vmem(&vstat); vmem_ptr = get_vmem(&vstat);
if (width == vstat.cols && height > vstat.rows / 2 && toy == 1) { if (width == vstat.cols && height > vstat.rows / 2 && toy == 1) {
vmem_ptr->top_row += (y - toy); vmem_ptr->top_row += (y - toy);
...@@ -1594,7 +1612,7 @@ int bitmap_movetext(int x, int y, int ex, int ey, int tox, int toy) ...@@ -1594,7 +1612,7 @@ int bitmap_movetext(int x, int y, int ex, int ey, int tox, int toy)
bitmap_movetext_screen(vmem_ptr, x, oy, tox, otoy, oscrolldown ? -1 : 1, oheight, width); bitmap_movetext_screen(vmem_ptr, x, oy, tox, otoy, oscrolldown ? -1 : 1, oheight, width);
release_vmem(vmem_ptr); release_vmem(vmem_ptr);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return(1); return(1);
} }
...@@ -1610,13 +1628,13 @@ void bitmap_clreol(void) ...@@ -1610,13 +1628,13 @@ void bitmap_clreol(void)
return; return;
row = cio_textinfo.cury + cio_textinfo.wintop - 1; row = cio_textinfo.cury + cio_textinfo.wintop - 1;
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
vmem_ptr = get_vmem(&vstat); vmem_ptr = get_vmem(&vstat);
for(x=cio_textinfo.curx+cio_textinfo.winleft-2; x<cio_textinfo.winright; x++) { for(x=cio_textinfo.curx+cio_textinfo.winleft-2; x<cio_textinfo.winright; x++) {
set_vmem_cell(vmem_ptr, x, row - 1, fill, ciolib_fg, ciolib_bg); set_vmem_cell(vmem_ptr, x, row - 1, fill, ciolib_fg, ciolib_bg);
} }
release_vmem(vmem_ptr); release_vmem(vmem_ptr);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
} }
void bitmap_clrscr(void) void bitmap_clrscr(void)
...@@ -1628,7 +1646,7 @@ void bitmap_clrscr(void) ...@@ -1628,7 +1646,7 @@ void bitmap_clrscr(void)
if(!bitmap_initialized) if(!bitmap_initialized)
return; return;
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
vmem_ptr = get_vmem(&vstat); vmem_ptr = get_vmem(&vstat);
rows = vstat.rows; rows = vstat.rows;
cols = vstat.cols; cols = vstat.cols;
...@@ -1638,12 +1656,12 @@ void bitmap_clrscr(void) ...@@ -1638,12 +1656,12 @@ void bitmap_clrscr(void)
} }
} }
release_vmem(vmem_ptr); release_vmem(vmem_ptr);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
} }
void bitmap_getcustomcursor(int *s, int *e, int *r, int *b, int *v) void bitmap_getcustomcursor(int *s, int *e, int *r, int *b, int *v)
{ {
rwlock_rdlock(&vstatlock); do_rwlock_rdlock(&vstatlock);
if(s) if(s)
*s=vstat.curs_start; *s=vstat.curs_start;
if(e) if(e)
...@@ -1654,14 +1672,14 @@ void bitmap_getcustomcursor(int *s, int *e, int *r, int *b, int *v) ...@@ -1654,14 +1672,14 @@ void bitmap_getcustomcursor(int *s, int *e, int *r, int *b, int *v)
*b=vstat.curs_blinks; *b=vstat.curs_blinks;
if(v) if(v)
*v=vstat.curs_visible; *v=vstat.curs_visible;
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
} }
void bitmap_setcustomcursor(int s, int e, int r, int b, int v) void bitmap_setcustomcursor(int s, int e, int r, int b, int v)
{ {
double ratio; double ratio;
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
if(r==0) if(r==0)
ratio=0; ratio=0;
else else
...@@ -1675,7 +1693,7 @@ void bitmap_setcustomcursor(int s, int e, int r, int b, int v) ...@@ -1675,7 +1693,7 @@ void bitmap_setcustomcursor(int s, int e, int r, int b, int v)
if(v>=0) if(v>=0)
vstat.curs_visible=v; vstat.curs_visible=v;
force_cursor = 1; force_cursor = 1;
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
} }
static void static void
...@@ -1698,14 +1716,12 @@ setvideoflags_from_vstat(void) ...@@ -1698,14 +1716,12 @@ setvideoflags_from_vstat(void)
int bitmap_getvideoflags(void) int bitmap_getvideoflags(void)
{ {
int flags=0;
return protected_int32_value(videoflags); return protected_int32_value(videoflags);
} }
void bitmap_setvideoflags(int flags) void bitmap_setvideoflags(int flags)
{ {
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
protected_int32_set(&videoflags, flags); protected_int32_set(&videoflags, flags);
if(flags & CIOLIB_VIDEO_BGBRIGHT) if(flags & CIOLIB_VIDEO_BGBRIGHT)
vstat.bright_background=1; vstat.bright_background=1;
...@@ -1731,16 +1747,16 @@ void bitmap_setvideoflags(int flags) ...@@ -1731,16 +1747,16 @@ void bitmap_setvideoflags(int flags)
vstat.blink_altcharset=1; vstat.blink_altcharset=1;
else else
vstat.blink_altcharset=0; vstat.blink_altcharset=0;
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
} }
int bitmap_attr2palette(uint8_t attr, uint32_t *fgp, uint32_t *bgp) int bitmap_attr2palette(uint8_t attr, uint32_t *fgp, uint32_t *bgp)
{ {
int ret; int ret;
rwlock_rdlock(&vstatlock); do_rwlock_rdlock(&vstatlock);
ret = bitmap_attr2palette_locked(attr, fgp, bgp); ret = bitmap_attr2palette_locked(attr, fgp, bgp);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return ret; return ret;
} }
...@@ -1748,7 +1764,7 @@ int bitmap_attr2palette(uint8_t attr, uint32_t *fgp, uint32_t *bgp) ...@@ -1748,7 +1764,7 @@ int bitmap_attr2palette(uint8_t attr, uint32_t *fgp, uint32_t *bgp)
int bitmap_setpixel(uint32_t x, uint32_t y, uint32_t colour) int bitmap_setpixel(uint32_t x, uint32_t y, uint32_t colour)
{ {
update_from_vmem(FALSE); update_from_vmem(FALSE);
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
struct vstat_vmem *vmem_ptr = get_vmem(&vstat); struct vstat_vmem *vmem_ptr = get_vmem(&vstat);
struct vmem_cell *vc = vmem_cell_ptr(vmem_ptr, x / vstat.charwidth, y / vstat.charheight); struct vmem_cell *vc = vmem_cell_ptr(vmem_ptr, x / vstat.charwidth, y / vstat.charheight);
vc->bg |= 0x04000000; vc->bg |= 0x04000000;
...@@ -1769,7 +1785,7 @@ int bitmap_setpixel(uint32_t x, uint32_t y, uint32_t colour) ...@@ -1769,7 +1785,7 @@ int bitmap_setpixel(uint32_t x, uint32_t y, uint32_t colour)
} }
} }
pthread_mutex_unlock(&screenlock); pthread_mutex_unlock(&screenlock);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return 1; return 1;
} }
...@@ -1806,12 +1822,12 @@ int bitmap_setpixels(uint32_t sx, uint32_t sy, uint32_t ex, uint32_t ey, uint32_ ...@@ -1806,12 +1822,12 @@ int bitmap_setpixels(uint32_t sx, uint32_t sy, uint32_t ex, uint32_t ey, uint32_
} }
update_from_vmem(FALSE); update_from_vmem(FALSE);
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
struct vstat_vmem *vmem_ptr = get_vmem(&vstat); struct vstat_vmem *vmem_ptr = get_vmem(&vstat);
pthread_mutex_lock(&screenlock); pthread_mutex_lock(&screenlock);
if (ex > screena.screenwidth || ey > screena.screenheight) { if (ex > screena.screenwidth || ey > screena.screenheight) {
pthread_mutex_unlock(&screenlock); pthread_mutex_unlock(&screenlock);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return 0; return 0;
} }
...@@ -1875,7 +1891,7 @@ int bitmap_setpixels(uint32_t sx, uint32_t sy, uint32_t ex, uint32_t ey, uint32_ ...@@ -1875,7 +1891,7 @@ int bitmap_setpixels(uint32_t sx, uint32_t sy, uint32_t ex, uint32_t ey, uint32_
} }
pthread_mutex_unlock(&screenlock); pthread_mutex_unlock(&screenlock);
release_vmem(vmem_ptr); release_vmem(vmem_ptr);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return 1; return 1;
} }
...@@ -1936,17 +1952,17 @@ struct ciolib_pixels *bitmap_getpixels(uint32_t sx, uint32_t sy, uint32_t ex, ui ...@@ -1936,17 +1952,17 @@ struct ciolib_pixels *bitmap_getpixels(uint32_t sx, uint32_t sy, uint32_t ex, ui
int bitmap_get_modepalette(uint32_t p[16]) int bitmap_get_modepalette(uint32_t p[16])
{ {
rwlock_rdlock(&vstatlock); do_rwlock_rdlock(&vstatlock);
memcpy(p, vstat.palette, sizeof(vstat.palette)); memcpy(p, vstat.palette, sizeof(vstat.palette));
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return 1; return 1;
} }
int bitmap_set_modepalette(uint32_t p[16]) int bitmap_set_modepalette(uint32_t p[16])
{ {
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
memcpy(vstat.palette, p, sizeof(vstat.palette)); memcpy(vstat.palette, p, sizeof(vstat.palette));
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
return 1; return 1;
} }
...@@ -2317,17 +2333,17 @@ int bitmap_drv_init(void (*drawrect_cb) (struct rectlist *data) ...@@ -2317,17 +2333,17 @@ int bitmap_drv_init(void (*drawrect_cb) (struct rectlist *data)
| CONIO_OPT_BLOCKY_SCALING; | CONIO_OPT_BLOCKY_SCALING;
protected_int32_init(&videoflags, 0); protected_int32_init(&videoflags, 0);
pthread_mutex_init(&callbacks.lock, NULL); pthread_mutex_init(&callbacks.lock, NULL);
rwlock_init(&vstatlock); do_rwlock_init(&vstatlock);
pthread_mutex_init(&screenlock, NULL); pthread_mutex_init(&screenlock, NULL);
pthread_mutex_init(&free_rect_lock, NULL); pthread_mutex_init(&free_rect_lock, NULL);
rwlock_wrlock(&vstatlock); do_rwlock_wrlock(&vstatlock);
vstat.flags = VIDMODES_FLAG_PALETTE_VMEM; vstat.flags = VIDMODES_FLAG_PALETTE_VMEM;
pthread_mutex_lock(&screenlock); pthread_mutex_lock(&screenlock);
for (i = 0; i < sizeof(dac_default)/sizeof(struct dac_colors); i++) { for (i = 0; i < sizeof(dac_default)/sizeof(struct dac_colors); i++) {
palette[i] = (0xffU << 24) | (dac_default[i].red << 16) | (dac_default[i].green << 8) | dac_default[i].blue; palette[i] = (0xffU << 24) | (dac_default[i].red << 16) | (dac_default[i].green << 8) | dac_default[i].blue;
} }
pthread_mutex_unlock(&screenlock); pthread_mutex_unlock(&screenlock);
rwlock_unlock(&vstatlock); do_rwlock_unlock(&vstatlock);
callbacks.drawrect=drawrect_cb; callbacks.drawrect=drawrect_cb;
callbacks.flush=flush_cb; callbacks.flush=flush_cb;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment