More improvements to support lwip
This commit is contained in:
parent
348a7acc15
commit
251654f2c7
@ -17,6 +17,7 @@
|
||||
#define EALREADY 0x1BAD000D
|
||||
#define EINPROGRESS 0x1BAD000E
|
||||
#define ENFILE 0x1BAD000F
|
||||
#define ETIMEDOUT 0x1BAD0010
|
||||
|
||||
#define EAFNOSUPPORT 0x1BAD0020
|
||||
#define ENOPROTOOPT 0x1BAD0021
|
||||
|
@ -2,6 +2,8 @@
|
||||
#ifndef __PTHREAD_H__
|
||||
#define __PTHREAD_H__
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#define PTHREAD_MUTEX_INITIALIZER NULL
|
||||
#define PTHREAD_COND_INITIALIZER NULL
|
||||
|
||||
@ -53,6 +55,8 @@ int pthread_mutex_unlock(pthread_mutex_t *mutex);
|
||||
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
|
||||
int pthread_cond_destroy(pthread_cond_t *cond);
|
||||
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
|
||||
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
|
||||
const struct timespec *abstime);
|
||||
int pthread_cond_signal(pthread_cond_t *cond);
|
||||
int pthread_cond_broadcast(pthread_cond_t *cond);
|
||||
|
||||
|
@ -2,6 +2,8 @@
|
||||
#ifndef __TIME_H__
|
||||
#define __TIME_H__
|
||||
|
||||
#include <sys/timespec.h>
|
||||
|
||||
struct tm {
|
||||
int tm_sec;
|
||||
int tm_min;
|
||||
|
@ -373,6 +373,40 @@ pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
|
||||
const struct timespec *abstime)
|
||||
{
|
||||
struct pthread_cond *cnd;
|
||||
uint64_t level;
|
||||
|
||||
if (*cond == NULL) {
|
||||
int status = pthread_cond_init(cond, NULL);
|
||||
if (status != 0)
|
||||
return status;
|
||||
}
|
||||
cnd = *cond;
|
||||
|
||||
if (mutex)
|
||||
pthread_mutex_unlock(mutex);
|
||||
|
||||
CoreMutex_Lock(&cnd->mtx);
|
||||
level = cnd->enter;
|
||||
cnd->enter++;
|
||||
CoreMutex_Unlock(&cnd->mtx);
|
||||
|
||||
while (level >= cnd->exit) {
|
||||
OSThreadSleep(0);
|
||||
|
||||
// XXX: check time
|
||||
}
|
||||
|
||||
if (mutex)
|
||||
pthread_mutex_lock(mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
pthread_cond_signal(pthread_cond_t *cond)
|
||||
|
13
sys/include/timespec.h
Normal file
13
sys/include/timespec.h
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
#ifndef __SYS_TIMESPEC_H__
|
||||
#define __SYS_TIMESPEC_H__
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
struct timespec {
|
||||
time_t tv_sec;
|
||||
long tv_nsec;
|
||||
};
|
||||
|
||||
#endif /* __SYS_TIMESPEC_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user