Skip to content

Commit 0705aa4

Browse files
committed
Return correct error number when time has already elapsed
1 parent a59469e commit 0705aa4

File tree

16 files changed

+81
-81
lines changed

16 files changed

+81
-81
lines changed

gc/ogc/lwp_messages.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ typedef struct _mqcntrl {
113113

114114
u32 __lwpmq_initialize(mq_cntrl *mqueue,mq_attr *attrs,u32 max_pendingmsgs,u32 max_msgsize);
115115
void __lwpmq_close(mq_cntrl *mqueue,u32 status);
116-
u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait,s64 timeout);
117-
u32 __lwpmq_submit(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 type,u32 wait,s64 timeout);
116+
u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait_status,s64 timeout);
117+
u32 __lwpmq_submit(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 type,u32 wait_status,s64 timeout);
118118
u32 __lwpmq_broadcast(mq_cntrl *mqueue,void *buffer,u32 size,u32 id,u32 *count);
119119
void __lwpmq_msg_insert(mq_cntrl *mqueue,mq_buffercntrl *msg,u32 type);
120120
u32 __lwpmq_flush(mq_cntrl *mqueue);

gc/ogc/lwp_sema.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ typedef struct _lwpsema {
8383

8484
void __lwp_sema_initialize(lwp_sema *sema,lwp_semattr *attrs,u32 init_count);
8585
u32 __lwp_sema_surrender(lwp_sema *sema,u32 id);
86-
u32 __lwp_sema_seize(lwp_sema *sema,u32 id,u32 wait,s64 timeout);
86+
u32 __lwp_sema_seize(lwp_sema *sema,u32 id,u32 wait_status,s64 timeout);
8787
void __lwp_sema_flush(lwp_sema *sema,u32 status);
8888

8989
#ifdef LIBOGC_INTERNAL

gc/ogc/lwp_threadq.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ void __lwp_threadqueue_enqueuefifo(lwp_thrqueue *queue,lwp_cntrl *thethread,s64
7171
lwp_cntrl* __lwp_threadqueue_dequeuefifo(lwp_thrqueue *queue);
7272
void __lwp_threadqueue_enqueuepriority(lwp_thrqueue *queue,lwp_cntrl *thethread,s64 timeout);
7373
lwp_cntrl* __lwp_threadqueue_dequeuepriority(lwp_thrqueue *queue);
74-
void __lwp_threadqueue_init(lwp_thrqueue *queue,u32 mode,u32 state,u32 timeout_state);
74+
void __lwp_threadqueue_init(lwp_thrqueue *queue,u32 mode,u32 state,u32 timeout_status);
7575
lwp_cntrl* __lwp_threadqueue_first(lwp_thrqueue *queue);
7676
void __lwp_threadqueue_enqueue(lwp_thrqueue *queue,s64 timeout);
7777
lwp_cntrl* __lwp_threadqueue_dequeue(lwp_thrqueue *queue);

gc/ogc/lwp_tqdata.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ typedef struct _lwpthrqueue {
8181
u32 sync_state;
8282
u32 mode;
8383
u32 state;
84-
u32 timeout_state;
84+
u32 timeout_status;
8585
} lwp_thrqueue;
8686

8787
#ifdef __cplusplus

libogc/cond.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ static cond_st* __lwp_cond_allocate(void)
111111

112112
static s32 __lwp_cond_waitsupp(cond_t cond,mutex_t mutex,s64 timeout,u8 timedout)
113113
{
114-
u32 status,mstatus,level;
114+
u32 status,mutex_status,level;
115115
cond_st *thecond;
116116

117117
thecond = __lwp_cond_open(cond);
@@ -142,8 +142,8 @@ static s32 __lwp_cond_waitsupp(cond_t cond,mutex_t mutex,s64 timeout,u8 timedout
142142
status = ETIMEDOUT;
143143
}
144144

145-
mstatus = LWP_MutexLock(mutex);
146-
if(mstatus)
145+
mutex_status = LWP_MutexLock(mutex);
146+
if(mutex_status)
147147
return EINVAL;
148148

149149
return status;

libogc/lwp.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ void LWP_ExitThread(void *value_ptr)
357357
__builtin_unreachable();
358358
}
359359

360-
static s32 __lwp_thread_joinsupp(lwp_t thethread,void **value_ptr,u8 block,s64 timeout)
360+
static s32 __lwp_thread_joinsupp(lwp_t thethread,void **value_ptr,u32 wait_status,s64 timeout)
361361
{
362362
u32 level;
363363
lwp_cntrl *exec,*lwp_thread;
@@ -382,9 +382,9 @@ static s32 __lwp_thread_joinsupp(lwp_t thethread,void **value_ptr,u8 block,s64 t
382382
return 0;
383383
}
384384

385-
if(!block) {
385+
if(wait_status) {
386386
__lwp_thread_dispatchenable();
387-
return EBUSY;
387+
return wait_status;
388388
}
389389

390390
exec = _thr_executing;
@@ -402,25 +402,25 @@ static s32 __lwp_thread_joinsupp(lwp_t thethread,void **value_ptr,u8 block,s64 t
402402

403403
s32 LWP_JoinThread(lwp_t thethread,void **value_ptr)
404404
{
405-
return __lwp_thread_joinsupp(thethread,value_ptr,TRUE,LWP_THREADQ_NOTIMEOUT);
405+
return __lwp_thread_joinsupp(thethread,value_ptr,0,LWP_THREADQ_NOTIMEOUT);
406406
}
407407

408408
s32 LWP_TimedJoinThread(lwp_t thethread,void **value_ptr,const struct timespec *reltime)
409409
{
410+
u32 wait_status = 0;
410411
s64 timeout = LWP_THREADQ_NOTIMEOUT;
411-
u8 block = TRUE;
412412

413413
if(reltime) {
414414
if(!__lwp_wd_timespec_valid(reltime)) return EINVAL;
415415
timeout = __lwp_wd_calc_ticks(reltime);
416-
if(timeout<=0) block = FALSE;
416+
if(timeout<=0) wait_status = ETIMEDOUT;
417417
}
418-
return __lwp_thread_joinsupp(thethread,value_ptr,block,timeout);
418+
return __lwp_thread_joinsupp(thethread,value_ptr,wait_status,timeout);
419419
}
420420

421421
s32 LWP_TryJoinThread(lwp_t thethread,void **value_ptr)
422422
{
423-
return __lwp_thread_joinsupp(thethread,value_ptr,FALSE,LWP_THREADQ_NOTIMEOUT);
423+
return __lwp_thread_joinsupp(thethread,value_ptr,EBUSY,LWP_THREADQ_NOTIMEOUT);
424424
}
425425

426426
s32 LWP_DetachThread(lwp_t thethread)

libogc/lwp_messages.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ u32 __lwpmq_initialize(mq_cntrl *mqueue,mq_attr *attrs,u32 max_pendingmsgs,u32 m
126126
return 1;
127127
}
128128

129-
u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait,s64 timeout)
129+
u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait_status,s64 timeout)
130130
{
131131
u32 level;
132132
mq_buffercntrl *msg;
@@ -135,7 +135,7 @@ u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait,s64 ti
135135
exec = _thr_executing;
136136
exec->wait.ret_code = LWP_MQ_STATUS_SUCCESSFUL;
137137
#ifdef _LWPMQ_DEBUG
138-
printf("__lwpmq_seize(%p,%d,%p,%p,%d,%d)\n",mqueue,id,buffer,size,wait,mqueue->num_pendingmsgs);
138+
printf("__lwpmq_seize(%p,%d,%p,%p,%d,%d)\n",mqueue,id,buffer,size,wait_status,mqueue->num_pendingmsgs);
139139
#endif
140140

141141
_CPU_ISR_Disable(level);
@@ -162,10 +162,10 @@ u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait,s64 ti
162162
return LWP_MQ_STATUS_SUCCESSFUL;
163163
}
164164

165-
if(!wait) {
165+
if(wait_status) {
166166
_CPU_ISR_Restore(level);
167-
exec->wait.ret_code = LWP_MQ_STATUS_UNSATISFIED_NOWAIT;
168-
return LWP_MQ_STATUS_UNSATISFIED_NOWAIT;
167+
exec->wait.ret_code = wait_status;
168+
return wait_status;
169169
}
170170

171171
__lwp_threadqueue_csenter(&mqueue->wait_queue);
@@ -179,14 +179,14 @@ u32 __lwpmq_seize(mq_cntrl *mqueue,u32 id,void *buffer,u32 *size,u32 wait,s64 ti
179179
return LWP_MQ_STATUS_SUCCESSFUL;
180180
}
181181

182-
u32 __lwpmq_submit(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 type,u32 wait,s64 timeout)
182+
u32 __lwpmq_submit(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 type,u32 wait_status,s64 timeout)
183183
{
184184
u32 level;
185185
lwp_cntrl *thread;
186186
mq_buffercntrl *msg;
187187

188188
#ifdef _LWPMQ_DEBUG
189-
printf("__lwpmq_submit(%p,%p,%d,%d,%d,%d)\n",mqueue,buffer,size,id,type,wait);
189+
printf("__lwpmq_submit(%p,%p,%d,%d,%d,%d)\n",mqueue,buffer,size,id,type,wait_status);
190190
#endif
191191
if(size>mqueue->max_msgsize)
192192
return LWP_MQ_STATUS_INVALID_SIZE;
@@ -212,7 +212,7 @@ u32 __lwpmq_submit(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 type,u32 wa
212212
return LWP_MQ_STATUS_SUCCESSFUL;
213213
}
214214

215-
if(!wait) return LWP_MQ_STATUS_TOO_MANY;
215+
if(wait_status) return wait_status;
216216
if(__lwp_isr_in_progress()) return LWP_MQ_STATUS_UNSATISFIED;
217217

218218
{

libogc/lwp_messages.inl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,14 @@ static __inline__ void __lwpmq_msg_prepend(mq_cntrl *mqueue,mq_buffercntrl *msg)
9191
__lwp_queue_prepend(&mqueue->pending_msgs,&msg->node);
9292
}
9393

94-
static __inline__ u32 __lwpmq_send(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 wait,s64 timeout)
94+
static __inline__ u32 __lwpmq_send(mq_cntrl *mqueue,u32 id,void *buffer,u32 size,u32 wait_status,s64 timeout)
9595
{
96-
return __lwpmq_submit(mqueue,id,buffer,size,LWP_MQ_SEND_REQUEST,wait,timeout);
96+
return __lwpmq_submit(mqueue,id,buffer,size,LWP_MQ_SEND_REQUEST,wait_status,timeout);
9797
}
9898

99-
static __inline__ u32 __lwpmq_urgent(mq_cntrl *mqueue,void *buffer,u32 size,u32 id,u32 wait,s64 timeout)
99+
static __inline__ u32 __lwpmq_urgent(mq_cntrl *mqueue,void *buffer,u32 size,u32 id,u32 wait_status,s64 timeout)
100100
{
101-
return __lwpmq_submit(mqueue,id,buffer,size,LWP_MQ_SEND_URGENT,wait,timeout);
101+
return __lwpmq_submit(mqueue,id,buffer,size,LWP_MQ_SEND_URGENT,wait_status,timeout);
102102
}
103103

104104
static __inline__ mq_buffercntrl* __lwpmq_get_pendingmsg(mq_cntrl *mqueue)

libogc/lwp_mutex.inl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,12 @@ static __inline__ u32 __lwp_mutex_seize_irq_trylock(lwp_mutex *mutex,u32 *isr_le
138138
return 1;
139139
}
140140

141-
#define __lwp_mutex_seize(_mutex_t,_id,_wait,_timeout,_level) \
141+
#define __lwp_mutex_seize(_mutex_t,_id,_wait_status,_timeout,_level) \
142142
do { \
143143
if(__lwp_mutex_seize_irq_trylock(_mutex_t,&_level)) { \
144-
if(!_wait) { \
144+
if(_wait_status) { \
145145
_CPU_ISR_Restore(_level); \
146-
_thr_executing->wait.ret_code = LWP_MUTEX_UNSATISFIED_NOWAIT; \
146+
_thr_executing->wait.ret_code = _wait_status; \
147147
} else { \
148148
__lwp_threadqueue_csenter(&(_mutex_t)->wait_queue); \
149149
_thr_executing->wait.queue = &(_mutex_t)->wait_queue; \

libogc/lwp_sema.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ u32 __lwp_sema_surrender(lwp_sema *sema,u32 id)
8080
return ret;
8181
}
8282

83-
u32 __lwp_sema_seize(lwp_sema *sema,u32 id,u32 wait,s64 timeout)
83+
u32 __lwp_sema_seize(lwp_sema *sema,u32 id,u32 wait_status,s64 timeout)
8484
{
8585
u32 level;
8686
lwp_cntrl *exec;
@@ -95,10 +95,10 @@ u32 __lwp_sema_seize(lwp_sema *sema,u32 id,u32 wait,s64 timeout)
9595
return LWP_SEMA_SUCCESSFUL;
9696
}
9797

98-
if(!wait) {
98+
if(wait_status) {
9999
_CPU_ISR_Restore(level);
100-
exec->wait.ret_code = LWP_SEMA_UNSATISFIED_NOWAIT;
101-
return LWP_SEMA_UNSATISFIED_NOWAIT;
100+
exec->wait.ret_code = wait_status;
101+
return wait_status;
102102
}
103103

104104
__lwp_threadqueue_csenter(&sema->wait_queue);

0 commit comments

Comments
 (0)