(Cheevos) On platforms like WiiU that have cheevos support but no threading support, it was complaining about unused variables like rcheevos_locals. The macros for

slock_lock/slock_unlock seem needless anyway, so we just reference slock_lock/slock_unlock directly and put it behind
HAVE_THREADS ifdefs so the user/programmer knows what is going on
This commit is contained in:
libretroadmin 2022-06-19 18:06:17 +02:00
parent f0e340fd23
commit 050107a90e
3 changed files with 40 additions and 26 deletions

View File

@ -1913,10 +1913,14 @@ static void rcheevos_login_callback(void* userdata)
/* Increment the outstanding requests counter and set the load state */
void rcheevos_begin_load_state(enum rcheevos_load_state state)
{
CHEEVOS_LOCK(rcheevos_locals.load_info.request_lock);
#ifdef HAVE_THREADS
slock_lock(rcheevos_locals.load_info.request_lock);
#endif
++rcheevos_locals.load_info.outstanding_requests;
rcheevos_locals.load_info.state = state;
CHEEVOS_UNLOCK(rcheevos_locals.load_info.request_lock);
#ifdef HAVE_THREADS
slock_unlock(rcheevos_locals.load_info.request_lock);
#endif
}
/* Decrement and return the outstanding requests counter.
@ -1925,11 +1929,15 @@ int rcheevos_end_load_state(void)
{
int requests = 0;
CHEEVOS_LOCK(rcheevos_locals.load_info.request_lock);
#ifdef HAVE_THREADS
slock_lock(rcheevos_locals.load_info.request_lock);
#endif
if (rcheevos_locals.load_info.outstanding_requests > 0)
--rcheevos_locals.load_info.outstanding_requests;
requests = rcheevos_locals.load_info.outstanding_requests;
CHEEVOS_UNLOCK(rcheevos_locals.load_info.request_lock);
#ifdef HAVE_THREADS
slock_unlock(rcheevos_locals.load_info.request_lock);
#endif
return requests;
}

View File

@ -1425,11 +1425,15 @@ static void rcheevos_async_download_next_badge(void* userdata)
static void rcheevos_async_fetch_badge_complete(rcheevos_fetch_badge_data* badge_data)
{
#ifdef HAVE_THREADS
const rcheevos_locals_t* rcheevos_locals = get_rcheevos_locals();
CHEEVOS_LOCK(rcheevos_locals->load_info.request_lock);
slock_lock(rcheevos_locals->load_info.request_lock);
#endif
badge_data->state->requested_badges[badge_data->request_index][0] = '\0';
CHEEVOS_UNLOCK(rcheevos_locals->load_info.request_lock);
#ifdef HAVE_THREADS
slock_unlock(rcheevos_locals->load_info.request_lock);
#endif
if (badge_data->callback)
badge_data->callback(badge_data);
@ -1517,11 +1521,12 @@ static bool rcheevos_client_fetch_badge(
/* check if it's already requested */
{
const rcheevos_locals_t* rcheevos_locals = get_rcheevos_locals();
int found_index = -1;
int i;
CHEEVOS_LOCK(rcheevos_locals->load_info.request_lock);
int found_index = -1;
#ifdef HAVE_THREADS
const rcheevos_locals_t* rcheevos_locals = get_rcheevos_locals();
slock_lock(rcheevos_locals->load_info.request_lock);
#endif
for (i = RCHEEVOS_CONCURRENT_BADGE_DOWNLOADS - 1; i >= 0; --i)
{
if (!state->requested_badges[i][0])
@ -1546,8 +1551,9 @@ static bool rcheevos_client_fetch_badge(
badge_fullname,
sizeof(state->requested_badges[request_index]));
}
CHEEVOS_UNLOCK(rcheevos_locals->load_info.request_lock);
#ifdef HAVE_THREADS
slock_unlock(rcheevos_locals->load_info.request_lock);
#endif
if (found_index != -1)
return false;
}
@ -1606,20 +1612,24 @@ static bool rcheevos_fetch_next_badge(rcheevos_fetch_badge_state* state)
}
else
{
int active = 0;
const rcheevos_racheevo_t *cheevo = NULL;
const rcheevos_locals_t* rcheevos_locals = get_rcheevos_locals();
const rcheevos_racheevo_t* cheevo = NULL;
int active = 0;
/* fetch badges for current state of achievements first */
do
{
CHEEVOS_LOCK(rcheevos_locals->load_info.request_lock);
#ifdef HAVE_THREADS
slock_lock(rcheevos_locals->load_info.request_lock);
#endif
if ( state->locked_badge_fetch_index
< rcheevos_locals->game.achievement_count)
cheevo = &rcheevos_locals->game.achievements[state->locked_badge_fetch_index++];
else
cheevo = NULL;
CHEEVOS_UNLOCK(rcheevos_locals->load_info.request_lock);
#ifdef HAVE_THREADS
slock_unlock(rcheevos_locals->load_info.request_lock);
#endif
if (!cheevo)
break;
@ -1634,13 +1644,17 @@ static bool rcheevos_fetch_next_badge(rcheevos_fetch_badge_state* state)
/* then fetch badges for unlocked state so they're ready when the user unlocks something */
do
{
CHEEVOS_LOCK(rcheevos_locals->load_info.request_lock);
#ifdef HAVE_THREADS
slock_lock(rcheevos_locals->load_info.request_lock);
#endif
if (state->badge_fetch_index < rcheevos_locals->game.achievement_count)
cheevo = &rcheevos_locals->game.achievements[state->badge_fetch_index++];
else
cheevo = NULL;
CHEEVOS_UNLOCK(rcheevos_locals->load_info.request_lock);
#ifdef HAVE_THREADS
slock_unlock(rcheevos_locals->load_info.request_lock);
#endif
if (!cheevo)
break;

View File

@ -190,14 +190,6 @@ bool rcheevos_load_aborted(void);
void rcheevos_show_mastery_placard(void);
#ifdef HAVE_THREADS
#define CHEEVOS_LOCK(l) do { slock_lock(l); } while (0)
#define CHEEVOS_UNLOCK(l) do { slock_unlock(l); } while (0)
#else
#define CHEEVOS_LOCK(l)
#define CHEEVOS_UNLOCK(l)
#endif
RETRO_END_DECLS
#endif /* __RARCH_CHEEVOS_LOCALS_H */