📄 os_core_symbian.cpp
字号:
PJ_DEF(pj_status_t) pj_thread_destroy(pj_thread_t *rec)
{
PJ_UNUSED_ARG(rec);
return PJ_EINVALIDOP;
}
/*
* pj_thread_sleep()
*/
PJ_DEF(pj_status_t) pj_thread_sleep(unsigned msec)
{
User::After(msec*1000);
TInt aError;
while (CActiveScheduler::RunIfReady(aError, EPriorityMuchLess))
;
return PJ_SUCCESS;
}
///////////////////////////////////////////////////////////////////////////////
/*
* pj_thread_local_alloc()
*/
PJ_DEF(pj_status_t) pj_thread_local_alloc(long *index)
{
unsigned i;
/* Find unused TLS variable */
for (i=0; i<PJ_ARRAY_SIZE(tls_vars); ++i) {
if (tls_vars[i] == 0)
break;
}
if (i == PJ_ARRAY_SIZE(tls_vars))
return PJ_ETOOMANY;
tls_vars[i] = 1;
*index = i;
return PJ_SUCCESS;
}
/*
* pj_thread_local_free()
*/
PJ_DEF(void) pj_thread_local_free(long index)
{
PJ_ASSERT_ON_FAIL(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
tls_vars[index] != 0, return);
tls_vars[index] = 0;
}
/*
* pj_thread_local_set()
*/
PJ_DEF(pj_status_t) pj_thread_local_set(long index, void *value)
{
pj_thread_t *rec = pj_thread_this();
PJ_ASSERT_RETURN(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
tls_vars[index] != 0, PJ_EINVAL);
rec->tls_values[index] = value;
return PJ_SUCCESS;
}
/*
* pj_thread_local_get()
*/
PJ_DEF(void*) pj_thread_local_get(long index)
{
pj_thread_t *rec = pj_thread_this();
PJ_ASSERT_RETURN(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
tls_vars[index] != 0, NULL);
return rec->tls_values[index];
}
///////////////////////////////////////////////////////////////////////////////
/*
* Create atomic variable.
*/
PJ_DEF(pj_status_t) pj_atomic_create( pj_pool_t *pool,
pj_atomic_value_t initial,
pj_atomic_t **atomic )
{
*atomic = (pj_atomic_t*)pj_pool_alloc(pool, sizeof(struct pj_atomic_t));
(*atomic)->value = initial;
return PJ_SUCCESS;
}
/*
* Destroy atomic variable.
*/
PJ_DEF(pj_status_t) pj_atomic_destroy( pj_atomic_t *atomic_var )
{
PJ_UNUSED_ARG(atomic_var);
return PJ_SUCCESS;
}
/*
* Set the value of an atomic type, and return the previous value.
*/
PJ_DEF(void) pj_atomic_set( pj_atomic_t *atomic_var,
pj_atomic_value_t value)
{
atomic_var->value = value;
}
/*
* Get the value of an atomic type.
*/
PJ_DEF(pj_atomic_value_t) pj_atomic_get(pj_atomic_t *atomic_var)
{
return atomic_var->value;
}
/*
* Increment the value of an atomic type.
*/
PJ_DEF(void) pj_atomic_inc(pj_atomic_t *atomic_var)
{
++atomic_var->value;
}
/*
* Increment the value of an atomic type and get the result.
*/
PJ_DEF(pj_atomic_value_t) pj_atomic_inc_and_get(pj_atomic_t *atomic_var)
{
return ++atomic_var->value;
}
/*
* Decrement the value of an atomic type.
*/
PJ_DEF(void) pj_atomic_dec(pj_atomic_t *atomic_var)
{
--atomic_var->value;
}
/*
* Decrement the value of an atomic type and get the result.
*/
PJ_DEF(pj_atomic_value_t) pj_atomic_dec_and_get(pj_atomic_t *atomic_var)
{
return --atomic_var->value;
}
/*
* Add a value to an atomic type.
*/
PJ_DEF(void) pj_atomic_add( pj_atomic_t *atomic_var,
pj_atomic_value_t value)
{
atomic_var->value += value;
}
/*
* Add a value to an atomic type and get the result.
*/
PJ_DEF(pj_atomic_value_t) pj_atomic_add_and_get( pj_atomic_t *atomic_var,
pj_atomic_value_t value)
{
atomic_var->value += value;
return atomic_var->value;
}
/////////////////////////////////////////////////////////////////////////////
PJ_DEF(pj_status_t) pj_mutex_create( pj_pool_t *pool,
const char *name,
int type,
pj_mutex_t **mutex)
{
PJ_UNUSED_ARG(pool);
PJ_UNUSED_ARG(name);
PJ_UNUSED_ARG(type);
*mutex = DUMMY_MUTEX;
return PJ_SUCCESS;
}
/*
* pj_mutex_create_simple()
*/
PJ_DEF(pj_status_t) pj_mutex_create_simple( pj_pool_t *pool,
const char *name,
pj_mutex_t **mutex )
{
return pj_mutex_create(pool, name, PJ_MUTEX_SIMPLE, mutex);
}
PJ_DEF(pj_status_t) pj_mutex_create_recursive( pj_pool_t *pool,
const char *name,
pj_mutex_t **mutex )
{
return pj_mutex_create(pool, name, PJ_MUTEX_RECURSE, mutex);
}
/*
* pj_mutex_lock()
*/
PJ_DEF(pj_status_t) pj_mutex_lock(pj_mutex_t *mutex)
{
pj_assert(mutex == DUMMY_MUTEX);
return PJ_SUCCESS;
}
/*
* pj_mutex_trylock()
*/
PJ_DEF(pj_status_t) pj_mutex_trylock(pj_mutex_t *mutex)
{
pj_assert(mutex == DUMMY_MUTEX);
return PJ_SUCCESS;
}
/*
* pj_mutex_unlock()
*/
PJ_DEF(pj_status_t) pj_mutex_unlock(pj_mutex_t *mutex)
{
pj_assert(mutex == DUMMY_MUTEX);
return PJ_SUCCESS;
}
/*
* pj_mutex_destroy()
*/
PJ_DEF(pj_status_t) pj_mutex_destroy(pj_mutex_t *mutex)
{
pj_assert(mutex == DUMMY_MUTEX);
return PJ_SUCCESS;
}
/////////////////////////////////////////////////////////////////////////////
/*
* RW Mutex
*/
#include "os_rwmutex.c"
/////////////////////////////////////////////////////////////////////////////
/*
* Enter critical section.
*/
PJ_DEF(void) pj_enter_critical_section(void)
{
/* Nothing to do */
}
/*
* Leave critical section.
*/
PJ_DEF(void) pj_leave_critical_section(void)
{
/* Nothing to do */
}
/////////////////////////////////////////////////////////////////////////////
/*
* Create semaphore.
*/
PJ_DEF(pj_status_t) pj_sem_create( pj_pool_t *pool,
const char *name,
unsigned initial,
unsigned max,
pj_sem_t **p_sem)
{
pj_sem_t *sem;
PJ_UNUSED_ARG(name);
sem = (pj_sem_t*) pj_pool_zalloc(pool, sizeof(pj_sem_t));
sem->value = initial;
sem->max = max;
*p_sem = sem;
return PJ_SUCCESS;
}
/*
* Wait for semaphore.
*/
PJ_DEF(pj_status_t) pj_sem_wait(pj_sem_t *sem)
{
if (sem->value > 0) {
sem->value--;
return PJ_SUCCESS;
} else {
pj_assert(!"Unexpected!");
return PJ_EINVALIDOP;
}
}
/*
* Try wait for semaphore.
*/
PJ_DEF(pj_status_t) pj_sem_trywait(pj_sem_t *sem)
{
if (sem->value > 0) {
sem->value--;
return PJ_SUCCESS;
} else {
pj_assert(!"Unexpected!");
return PJ_EINVALIDOP;
}
}
/*
* Release semaphore.
*/
PJ_DEF(pj_status_t) pj_sem_post(pj_sem_t *sem)
{
sem->value++;
return PJ_SUCCESS;
}
/*
* Destroy semaphore.
*/
PJ_DEF(pj_status_t) pj_sem_destroy(pj_sem_t *sem)
{
PJ_UNUSED_ARG(sem);
return PJ_SUCCESS;
}
#if defined(PJ_OS_HAS_CHECK_STACK) && PJ_OS_HAS_CHECK_STACK != 0
/*
* The implementation of stack checking.
*/
PJ_DEF(void) pj_thread_check_stack(const char *file, int line)
{
char stk_ptr;
pj_uint32_t usage;
pj_thread_t *thread = pj_thread_this();
pj_assert(thread);
/* Calculate current usage. */
usage = (&stk_ptr > thread->stk_start) ? &stk_ptr - thread->stk_start :
thread->stk_start - &stk_ptr;
/* Assert if stack usage is dangerously high. */
pj_assert("STACK OVERFLOW!! " && (usage <= thread->stk_size - 128));
/* Keep statistic. */
if (usage > thread->stk_max_usage) {
thread->stk_max_usage = usage;
thread->caller_file = file;
thread->caller_line = line;
}
}
/*
* Get maximum stack usage statistic.
*/
PJ_DEF(pj_uint32_t) pj_thread_get_stack_max_usage(pj_thread_t *thread)
{
return thread->stk_max_usage;
}
/*
* Dump thread stack status.
*/
PJ_DEF(pj_status_t) pj_thread_get_stack_info(pj_thread_t *thread,
const char **file,
int *line)
{
pj_assert(thread);
*file = thread->caller_file;
*line = thread->caller_line;
return 0;
}
#endif /* PJ_OS_HAS_CHECK_STACK */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -