Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2014-11-05 17:13:18 +0800
Browse Files
Options
Browse Files
Download
Plain Diff
Commit
7bfa86de5ac0c12b47f65c472a1435f269c7ea56
7bfa86de
2 parents
760c37ae
bba2d3dd
Merge branch 'srs.master'
隐藏空白字符变更
内嵌
并排对比
正在显示
5 个修改的文件
包含
215 行增加
和
217 行删除
trunk/research/st/common.h
trunk/research/st/io.c
trunk/research/st/public.h
trunk/research/st/sched.c
trunk/research/st/sync.c
trunk/research/st/common.h
查看文件 @
7bfa86d
...
...
@@ -79,20 +79,20 @@ typedef struct _st_clist {
/* Insert element "_e" into the list, before "_l" */
#define ST_INSERT_BEFORE(_e,_l) \
ST_BEGIN_MACRO \
(_e)->next = (_l); \
ST_BEGIN_MACRO \
(_e)->next = (_l); \
(_e)->prev = (_l)->prev; \
(_l)->prev->next = (_e); \
(_l)->prev = (_e);
\
(_l)->prev = (_e);
\
ST_END_MACRO
/* Insert element "_e" into the list, after "_l" */
#define ST_INSERT_AFTER(_e,_l) \
ST_BEGIN_MACRO
\
ST_BEGIN_MACRO
\
(_e)->next = (_l)->next; \
(_e)->prev = (_l);
\
(_e)->prev = (_l);
\
(_l)->next->prev = (_e); \
(_l)->next = (_e);
\
(_l)->next = (_e);
\
ST_END_MACRO
/* Return the element following element "_e" */
...
...
@@ -110,7 +110,7 @@ typedef struct _st_clist {
/* Remove the element "_e" from it's circular list */
#define ST_REMOVE_LINK(_e) \
ST_BEGIN_MACRO
\
ST_BEGIN_MACRO
\
(_e)->prev->next = (_e)->next; \
(_e)->next->prev = (_e)->prev; \
ST_END_MACRO
...
...
@@ -287,7 +287,7 @@ extern _st_eventsys_t *_st_eventsys;
#define _ST_DEL_RUNQ(_thr) ST_REMOVE_LINK(&(_thr)->links)
#define _ST_ADD_SLEEPQ(_thr, _timeout) _st_add_sleep_q(_thr, _timeout)
#define _ST_DEL_SLEEPQ(_thr)
_st_del_sleep_q(_thr)
#define _ST_DEL_SLEEPQ(_thr)
_st_del_sleep_q(_thr)
#define _ST_ADD_ZOMBIEQ(_thr) ST_APPEND_LINK(&(_thr)->links, &_ST_ZOMBIEQ)
#define _ST_DEL_ZOMBIEQ(_thr) ST_REMOVE_LINK(&(_thr)->links)
...
...
@@ -379,17 +379,17 @@ void _st_iterate_threads(void);
#endif
#ifdef ST_SWITCH_CB
#define ST_SWITCH_OUT_CB(_thread)
\
#define ST_SWITCH_OUT_CB(_thread)
\
if (_st_this_vp.switch_out_cb != NULL && \
_thread != _st_this_vp.idle_thread && \
_thread->state != _ST_ST_ZOMBIE) { \
_st_this_vp.switch_out_cb();
\
_st_this_vp.switch_out_cb();
\
}
#define ST_SWITCH_IN_CB(_thread)
\
#define ST_SWITCH_IN_CB(_thread)
\
if (_st_this_vp.switch_in_cb != NULL && \
_thread != _st_this_vp.idle_thread && \
_thread->state != _ST_ST_ZOMBIE) { \
_st_this_vp.switch_in_cb(); \
_thread != _st_this_vp.idle_thread && \
_thread->state != _ST_ST_ZOMBIE) { \
_st_this_vp.switch_in_cb(); \
}
#else
#define ST_SWITCH_OUT_CB(_thread)
...
...
@@ -457,10 +457,10 @@ int st_cond_timedwait(_st_cond_t *cvar, st_utime_t timeout);
int
st_cond_signal
(
_st_cond_t
*
cvar
);
ssize_t
st_read
(
_st_netfd_t
*
fd
,
void
*
buf
,
size_t
nbyte
,
st_utime_t
timeout
);
ssize_t
st_write
(
_st_netfd_t
*
fd
,
const
void
*
buf
,
size_t
nbyte
,
st_utime_t
timeout
);
st_utime_t
timeout
);
int
st_poll
(
struct
pollfd
*
pds
,
int
npds
,
st_utime_t
timeout
);
_st_thread_t
*
st_thread_create
(
void
*
(
*
start
)(
void
*
arg
),
void
*
arg
,
int
joinable
,
int
stk_size
);
int
joinable
,
int
stk_size
);
#endif
/* !__ST_COMMON_H__ */
...
...
trunk/research/st/io.c
查看文件 @
7bfa86d
...
...
@@ -187,7 +187,7 @@ int st_netfd_fileno(_st_netfd_t *fd)
void
st_netfd_setspecific
(
_st_netfd_t
*
fd
,
void
*
value
,
_st_destructor_t
destructor
)
_st_destructor_t
destructor
)
{
if
(
value
!=
fd
->
private_data
)
{
/* Free up previously set non-NULL data value */
...
...
@@ -248,7 +248,7 @@ static void _st_netfd_free_aux_data(_st_netfd_t *fd)
}
_st_netfd_t
*
st_accept
(
_st_netfd_t
*
fd
,
struct
sockaddr
*
addr
,
int
*
addrlen
,
st_utime_t
timeout
)
st_utime_t
timeout
)
{
int
osfd
,
err
;
_st_netfd_t
*
newfd
;
...
...
@@ -335,7 +335,7 @@ static void _st_netfd_free_aux_data(_st_netfd_t *fd)
}
_st_netfd_t
*
st_accept
(
_st_netfd_t
*
fd
,
struct
sockaddr
*
addr
,
int
*
addrlen
,
st_utime_t
timeout
)
st_utime_t
timeout
)
{
int
osfd
,
err
;
_st_netfd_t
*
newfd
;
...
...
@@ -415,7 +415,7 @@ int st_connect(_st_netfd_t *fd, const struct sockaddr *addr, int addrlen,
/* Try to find out whether the connection setup succeeded or failed */
n
=
sizeof
(
int
);
if
(
getsockopt
(
fd
->
osfd
,
SOL_SOCKET
,
SO_ERROR
,
(
char
*
)
&
err
,
(
socklen_t
*
)
&
n
)
<
0
)
(
socklen_t
*
)
&
n
)
<
0
)
return
-
1
;
if
(
err
)
{
errno
=
err
;
...
...
@@ -449,7 +449,7 @@ ssize_t st_read(_st_netfd_t *fd, void *buf, size_t nbyte, st_utime_t timeout)
int
st_read_resid
(
_st_netfd_t
*
fd
,
void
*
buf
,
size_t
*
resid
,
st_utime_t
timeout
)
st_utime_t
timeout
)
{
struct
iovec
iov
,
*
riov
;
int
riov_size
,
rv
;
...
...
@@ -465,7 +465,7 @@ int st_read_resid(_st_netfd_t *fd, void *buf, size_t *resid,
ssize_t
st_readv
(
_st_netfd_t
*
fd
,
const
struct
iovec
*
iov
,
int
iov_size
,
st_utime_t
timeout
)
st_utime_t
timeout
)
{
ssize_t
n
;
...
...
@@ -483,7 +483,7 @@ ssize_t st_readv(_st_netfd_t *fd, const struct iovec *iov, int iov_size,
}
int
st_readv_resid
(
_st_netfd_t
*
fd
,
struct
iovec
**
iov
,
int
*
iov_size
,
st_utime_t
timeout
)
st_utime_t
timeout
)
{
ssize_t
n
;
...
...
@@ -524,7 +524,7 @@ int st_readv_resid(_st_netfd_t *fd, struct iovec **iov, int *iov_size,
ssize_t
st_read_fully
(
_st_netfd_t
*
fd
,
void
*
buf
,
size_t
nbyte
,
st_utime_t
timeout
)
st_utime_t
timeout
)
{
size_t
resid
=
nbyte
;
return
st_read_resid
(
fd
,
buf
,
&
resid
,
timeout
)
==
0
?
...
...
@@ -533,7 +533,7 @@ ssize_t st_read_fully(_st_netfd_t *fd, void *buf, size_t nbyte,
int
st_write_resid
(
_st_netfd_t
*
fd
,
const
void
*
buf
,
size_t
*
resid
,
st_utime_t
timeout
)
st_utime_t
timeout
)
{
struct
iovec
iov
,
*
riov
;
int
riov_size
,
rv
;
...
...
@@ -549,7 +549,7 @@ int st_write_resid(_st_netfd_t *fd, const void *buf, size_t *resid,
ssize_t
st_write
(
_st_netfd_t
*
fd
,
const
void
*
buf
,
size_t
nbyte
,
st_utime_t
timeout
)
st_utime_t
timeout
)
{
size_t
resid
=
nbyte
;
return
st_write_resid
(
fd
,
buf
,
&
resid
,
timeout
)
==
0
?
...
...
@@ -558,7 +558,7 @@ ssize_t st_write(_st_netfd_t *fd, const void *buf, size_t nbyte,
ssize_t
st_writev
(
_st_netfd_t
*
fd
,
const
struct
iovec
*
iov
,
int
iov_size
,
st_utime_t
timeout
)
st_utime_t
timeout
)
{
ssize_t
n
,
rv
;
size_t
nleft
,
nbyte
;
...
...
@@ -634,7 +634,7 @@ ssize_t st_writev(_st_netfd_t *fd, const struct iovec *iov, int iov_size,
int
st_writev_resid
(
_st_netfd_t
*
fd
,
struct
iovec
**
iov
,
int
*
iov_size
,
st_utime_t
timeout
)
st_utime_t
timeout
)
{
ssize_t
n
;
...
...
@@ -676,7 +676,7 @@ int st_writev_resid(_st_netfd_t *fd, struct iovec **iov, int *iov_size,
* Simple I/O functions for UDP.
*/
int
st_recvfrom
(
_st_netfd_t
*
fd
,
void
*
buf
,
int
len
,
struct
sockaddr
*
from
,
int
*
fromlen
,
st_utime_t
timeout
)
int
*
fromlen
,
st_utime_t
timeout
)
{
int
n
;
...
...
trunk/research/st/public.h
100644 → 100755
查看文件 @
7bfa86d
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is the Netscape Portable Runtime library.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1994-2000 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Silicon Graphics, Inc.
*
* Portions created by SGI are Copyright (C) 2000-2001 Silicon
* Graphics, Inc. All Rights Reserved.
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
* "GPL"), in which case the provisions of the GPL are applicable
* instead of those above. If you wish to allow use of your
* version of this file only under the terms of the GPL and not to
* allow others to use your version of this file under the MPL,
* indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by
* the GPL. If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
#ifndef __ST_THREAD_H__
#define __ST_THREAD_H__
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <time.h>
#include <errno.h>
#include <poll.h>
#define ST_VERSION "1.9"
#define ST_VERSION_MAJOR 1
#define ST_VERSION_MINOR 9
/* Undefine this to remove the context switch callback feature. */
#define ST_SWITCH_CB
#ifndef ETIME
#define ETIME ETIMEDOUT
#endif
#ifndef ST_UTIME_NO_TIMEOUT
#define ST_UTIME_NO_TIMEOUT ((st_utime_t) -1LL)
#endif
#ifndef ST_UTIME_NO_WAIT
#define ST_UTIME_NO_WAIT 0
#endif
#define ST_EVENTSYS_DEFAULT 0
#define ST_EVENTSYS_SELECT 1
#define ST_EVENTSYS_POLL 2
#define ST_EVENTSYS_ALT 3
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
unsigned
long
long
st_utime_t
;
typedef
struct
_st_thread
*
st_thread_t
;
typedef
struct
_st_cond
*
st_cond_t
;
typedef
struct
_st_mutex
*
st_mutex_t
;
typedef
struct
_st_netfd
*
st_netfd_t
;
#ifdef ST_SWITCH_CB
typedef
void
(
*
st_switch_cb_t
)(
void
);
#endif
extern
int
st_init
(
void
);
extern
int
st_getfdlimit
(
void
);
extern
int
st_set_eventsys
(
int
eventsys
);
extern
int
st_get_eventsys
(
void
);
extern
const
char
*
st_get_eventsys_name
(
void
);
#ifdef ST_SWITCH_CB
extern
st_switch_cb_t
st_set_switch_in_cb
(
st_switch_cb_t
cb
);
extern
st_switch_cb_t
st_set_switch_out_cb
(
st_switch_cb_t
cb
);
#endif
extern
st_thread_t
st_thread_self
(
void
);
extern
void
st_thread_exit
(
void
*
retval
);
extern
int
st_thread_join
(
st_thread_t
thread
,
void
**
retvalp
);
extern
void
st_thread_interrupt
(
st_thread_t
thread
);
extern
st_thread_t
st_thread_create
(
void
*
(
*
start
)(
void
*
arg
),
void
*
arg
,
int
joinable
,
int
stack_size
);
extern
int
st_randomize_stacks
(
int
on
);
extern
int
st_set_utime_function
(
st_utime_t
(
*
func
)(
void
));
extern
st_utime_t
st_utime
(
void
);
extern
st_utime_t
st_utime_last_clock
(
void
);
extern
int
st_timecache_set
(
int
on
);
extern
time_t
st_time
(
void
);
extern
int
st_usleep
(
st_utime_t
usecs
);
extern
int
st_sleep
(
int
secs
);
extern
st_cond_t
st_cond_new
(
void
);
extern
int
st_cond_destroy
(
st_cond_t
cvar
);
extern
int
st_cond_timedwait
(
st_cond_t
cvar
,
st_utime_t
timeout
);
extern
int
st_cond_wait
(
st_cond_t
cvar
);
extern
int
st_cond_signal
(
st_cond_t
cvar
);
extern
int
st_cond_broadcast
(
st_cond_t
cvar
);
extern
st_mutex_t
st_mutex_new
(
void
);
extern
int
st_mutex_destroy
(
st_mutex_t
lock
);
extern
int
st_mutex_lock
(
st_mutex_t
lock
);
extern
int
st_mutex_unlock
(
st_mutex_t
lock
);
extern
int
st_mutex_trylock
(
st_mutex_t
lock
);
extern
int
st_key_create
(
int
*
keyp
,
void
(
*
destructor
)(
void
*
));
extern
int
st_key_getlimit
(
void
);
extern
int
st_thread_setspecific
(
int
key
,
void
*
value
);
extern
void
*
st_thread_getspecific
(
int
key
);
extern
st_netfd_t
st_netfd_open
(
int
osfd
);
extern
st_netfd_t
st_netfd_open_socket
(
int
osfd
);
extern
void
st_netfd_free
(
st_netfd_t
fd
);
extern
int
st_netfd_close
(
st_netfd_t
fd
);
extern
int
st_netfd_fileno
(
st_netfd_t
fd
);
extern
void
st_netfd_setspecific
(
st_netfd_t
fd
,
void
*
value
,
void
(
*
destructor
)(
void
*
));
extern
void
*
st_netfd_getspecific
(
st_netfd_t
fd
);
extern
int
st_netfd_serialize_accept
(
st_netfd_t
fd
);
extern
int
st_netfd_poll
(
st_netfd_t
fd
,
int
how
,
st_utime_t
timeout
);
extern
int
st_poll
(
struct
pollfd
*
pds
,
int
npds
,
st_utime_t
timeout
);
extern
st_netfd_t
st_accept
(
st_netfd_t
fd
,
struct
sockaddr
*
addr
,
int
*
addrlen
,
st_utime_t
timeout
);
extern
int
st_connect
(
st_netfd_t
fd
,
const
struct
sockaddr
*
addr
,
int
addrlen
,
st_utime_t
timeout
);
extern
ssize_t
st_read
(
st_netfd_t
fd
,
void
*
buf
,
size_t
nbyte
,
st_utime_t
timeout
);
extern
ssize_t
st_read_fully
(
st_netfd_t
fd
,
void
*
buf
,
size_t
nbyte
,
st_utime_t
timeout
);
extern
int
st_read_resid
(
st_netfd_t
fd
,
void
*
buf
,
size_t
*
resid
,
st_utime_t
timeout
);
extern
ssize_t
st_readv
(
st_netfd_t
fd
,
const
struct
iovec
*
iov
,
int
iov_size
,
st_utime_t
timeout
);
extern
int
st_readv_resid
(
st_netfd_t
fd
,
struct
iovec
**
iov
,
int
*
iov_size
,
st_utime_t
timeout
);
extern
ssize_t
st_write
(
st_netfd_t
fd
,
const
void
*
buf
,
size_t
nbyte
,
st_utime_t
timeout
);
extern
int
st_write_resid
(
st_netfd_t
fd
,
const
void
*
buf
,
size_t
*
resid
,
st_utime_t
timeout
);
extern
ssize_t
st_writev
(
st_netfd_t
fd
,
const
struct
iovec
*
iov
,
int
iov_size
,
st_utime_t
timeout
);
extern
int
st_writev_resid
(
st_netfd_t
fd
,
struct
iovec
**
iov
,
int
*
iov_size
,
st_utime_t
timeout
);
extern
int
st_recvfrom
(
st_netfd_t
fd
,
void
*
buf
,
int
len
,
struct
sockaddr
*
from
,
int
*
fromlen
,
st_utime_t
timeout
);
extern
int
st_sendto
(
st_netfd_t
fd
,
const
void
*
msg
,
int
len
,
const
struct
sockaddr
*
to
,
int
tolen
,
st_utime_t
timeout
);
extern
int
st_recvmsg
(
st_netfd_t
fd
,
struct
msghdr
*
msg
,
int
flags
,
st_utime_t
timeout
);
extern
int
st_sendmsg
(
st_netfd_t
fd
,
const
struct
msghdr
*
msg
,
int
flags
,
st_utime_t
timeout
);
extern
st_netfd_t
st_open
(
const
char
*
path
,
int
oflags
,
mode_t
mode
);
#ifdef DEBUG
extern
void
_st_show_thread_stack
(
st_thread_t
thread
,
const
char
*
messg
);
extern
void
_st_iterate_threads
(
void
);
#endif
#ifdef __cplusplus
}
#endif
#endif
/* !__ST_THREAD_H__ */
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is the Netscape Portable Runtime library.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1994-2000 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s): Silicon Graphics, Inc.
*
* Portions created by SGI are Copyright (C) 2000-2001 Silicon
* Graphics, Inc. All Rights Reserved.
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
* "GPL"), in which case the provisions of the GPL are applicable
* instead of those above. If you wish to allow use of your
* version of this file only under the terms of the GPL and not to
* allow others to use your version of this file under the MPL,
* indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by
* the GPL. If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
#ifndef __ST_THREAD_H__
#define __ST_THREAD_H__
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <time.h>
#include <errno.h>
#include <poll.h>
#define ST_VERSION "1.9"
#define ST_VERSION_MAJOR 1
#define ST_VERSION_MINOR 9
/* Undefine this to remove the context switch callback feature. */
#define ST_SWITCH_CB
#ifndef ETIME
#define ETIME ETIMEDOUT
#endif
#ifndef ST_UTIME_NO_TIMEOUT
#define ST_UTIME_NO_TIMEOUT ((st_utime_t) -1LL)
#endif
#ifndef ST_UTIME_NO_WAIT
#define ST_UTIME_NO_WAIT 0
#endif
#define ST_EVENTSYS_DEFAULT 0
#define ST_EVENTSYS_SELECT 1
#define ST_EVENTSYS_POLL 2
#define ST_EVENTSYS_ALT 3
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
unsigned
long
long
st_utime_t
;
typedef
struct
_st_thread
*
st_thread_t
;
typedef
struct
_st_cond
*
st_cond_t
;
typedef
struct
_st_mutex
*
st_mutex_t
;
typedef
struct
_st_netfd
*
st_netfd_t
;
#ifdef ST_SWITCH_CB
typedef
void
(
*
st_switch_cb_t
)(
void
);
#endif
extern
int
st_init
(
void
);
extern
int
st_getfdlimit
(
void
);
extern
int
st_set_eventsys
(
int
eventsys
);
extern
int
st_get_eventsys
(
void
);
extern
const
char
*
st_get_eventsys_name
(
void
);
#ifdef ST_SWITCH_CB
extern
st_switch_cb_t
st_set_switch_in_cb
(
st_switch_cb_t
cb
);
extern
st_switch_cb_t
st_set_switch_out_cb
(
st_switch_cb_t
cb
);
#endif
extern
st_thread_t
st_thread_self
(
void
);
extern
void
st_thread_exit
(
void
*
retval
);
extern
int
st_thread_join
(
st_thread_t
thread
,
void
**
retvalp
);
extern
void
st_thread_interrupt
(
st_thread_t
thread
);
extern
st_thread_t
st_thread_create
(
void
*
(
*
start
)(
void
*
arg
),
void
*
arg
,
int
joinable
,
int
stack_size
);
extern
int
st_randomize_stacks
(
int
on
);
extern
int
st_set_utime_function
(
st_utime_t
(
*
func
)(
void
));
extern
st_utime_t
st_utime
(
void
);
extern
st_utime_t
st_utime_last_clock
(
void
);
extern
int
st_timecache_set
(
int
on
);
extern
time_t
st_time
(
void
);
extern
int
st_usleep
(
st_utime_t
usecs
);
extern
int
st_sleep
(
int
secs
);
extern
st_cond_t
st_cond_new
(
void
);
extern
int
st_cond_destroy
(
st_cond_t
cvar
);
extern
int
st_cond_timedwait
(
st_cond_t
cvar
,
st_utime_t
timeout
);
extern
int
st_cond_wait
(
st_cond_t
cvar
);
extern
int
st_cond_signal
(
st_cond_t
cvar
);
extern
int
st_cond_broadcast
(
st_cond_t
cvar
);
extern
st_mutex_t
st_mutex_new
(
void
);
extern
int
st_mutex_destroy
(
st_mutex_t
lock
);
extern
int
st_mutex_lock
(
st_mutex_t
lock
);
extern
int
st_mutex_unlock
(
st_mutex_t
lock
);
extern
int
st_mutex_trylock
(
st_mutex_t
lock
);
extern
int
st_key_create
(
int
*
keyp
,
void
(
*
destructor
)(
void
*
));
extern
int
st_key_getlimit
(
void
);
extern
int
st_thread_setspecific
(
int
key
,
void
*
value
);
extern
void
*
st_thread_getspecific
(
int
key
);
extern
st_netfd_t
st_netfd_open
(
int
osfd
);
extern
st_netfd_t
st_netfd_open_socket
(
int
osfd
);
extern
void
st_netfd_free
(
st_netfd_t
fd
);
extern
int
st_netfd_close
(
st_netfd_t
fd
);
extern
int
st_netfd_fileno
(
st_netfd_t
fd
);
extern
void
st_netfd_setspecific
(
st_netfd_t
fd
,
void
*
value
,
void
(
*
destructor
)(
void
*
));
extern
void
*
st_netfd_getspecific
(
st_netfd_t
fd
);
extern
int
st_netfd_serialize_accept
(
st_netfd_t
fd
);
extern
int
st_netfd_poll
(
st_netfd_t
fd
,
int
how
,
st_utime_t
timeout
);
extern
int
st_poll
(
struct
pollfd
*
pds
,
int
npds
,
st_utime_t
timeout
);
extern
st_netfd_t
st_accept
(
st_netfd_t
fd
,
struct
sockaddr
*
addr
,
int
*
addrlen
,
st_utime_t
timeout
);
extern
int
st_connect
(
st_netfd_t
fd
,
const
struct
sockaddr
*
addr
,
int
addrlen
,
st_utime_t
timeout
);
extern
ssize_t
st_read
(
st_netfd_t
fd
,
void
*
buf
,
size_t
nbyte
,
st_utime_t
timeout
);
extern
ssize_t
st_read_fully
(
st_netfd_t
fd
,
void
*
buf
,
size_t
nbyte
,
st_utime_t
timeout
);
extern
int
st_read_resid
(
st_netfd_t
fd
,
void
*
buf
,
size_t
*
resid
,
st_utime_t
timeout
);
extern
ssize_t
st_readv
(
st_netfd_t
fd
,
const
struct
iovec
*
iov
,
int
iov_size
,
st_utime_t
timeout
);
extern
int
st_readv_resid
(
st_netfd_t
fd
,
struct
iovec
**
iov
,
int
*
iov_size
,
st_utime_t
timeout
);
extern
ssize_t
st_write
(
st_netfd_t
fd
,
const
void
*
buf
,
size_t
nbyte
,
st_utime_t
timeout
);
extern
int
st_write_resid
(
st_netfd_t
fd
,
const
void
*
buf
,
size_t
*
resid
,
st_utime_t
timeout
);
extern
ssize_t
st_writev
(
st_netfd_t
fd
,
const
struct
iovec
*
iov
,
int
iov_size
,
st_utime_t
timeout
);
extern
int
st_writev_resid
(
st_netfd_t
fd
,
struct
iovec
**
iov
,
int
*
iov_size
,
st_utime_t
timeout
);
extern
int
st_recvfrom
(
st_netfd_t
fd
,
void
*
buf
,
int
len
,
struct
sockaddr
*
from
,
int
*
fromlen
,
st_utime_t
timeout
);
extern
int
st_sendto
(
st_netfd_t
fd
,
const
void
*
msg
,
int
len
,
const
struct
sockaddr
*
to
,
int
tolen
,
st_utime_t
timeout
);
extern
int
st_recvmsg
(
st_netfd_t
fd
,
struct
msghdr
*
msg
,
int
flags
,
st_utime_t
timeout
);
extern
int
st_sendmsg
(
st_netfd_t
fd
,
const
struct
msghdr
*
msg
,
int
flags
,
st_utime_t
timeout
);
extern
st_netfd_t
st_open
(
const
char
*
path
,
int
oflags
,
mode_t
mode
);
#ifdef DEBUG
extern
void
_st_show_thread_stack
(
st_thread_t
thread
,
const
char
*
messg
);
extern
void
_st_iterate_threads
(
void
);
#endif
#ifdef __cplusplus
}
#endif
#endif
/* !__ST_THREAD_H__ */
...
...
trunk/research/st/sched.c
查看文件 @
7bfa86d
...
...
@@ -165,7 +165,7 @@ int st_init(void)
* Create idle thread
*/
_st_this_vp
.
idle_thread
=
st_thread_create
(
_st_idle_thread_start
,
NULL
,
0
,
0
);
NULL
,
0
,
0
);
if
(
!
_st_this_vp
.
idle_thread
)
return
-
1
;
_st_this_vp
.
idle_thread
->
flags
=
_ST_FL_IDLE_THREAD
;
...
...
@@ -176,7 +176,7 @@ int st_init(void)
* Initialize primordial thread
*/
thread
=
(
_st_thread_t
*
)
calloc
(
1
,
sizeof
(
_st_thread_t
)
+
(
ST_KEYS_MAX
*
sizeof
(
void
*
)));
(
ST_KEYS_MAX
*
sizeof
(
void
*
)));
if
(
!
thread
)
return
-
1
;
thread
->
private_data
=
(
void
**
)
(
thread
+
1
);
...
...
@@ -518,7 +518,7 @@ void st_thread_interrupt(_st_thread_t *thread)
_st_thread_t
*
st_thread_create
(
void
*
(
*
start
)(
void
*
arg
),
void
*
arg
,
int
joinable
,
int
stk_size
)
int
joinable
,
int
stk_size
)
{
_st_thread_t
*
thread
;
_st_stack_t
*
stack
;
...
...
trunk/research/st/sync.c
查看文件 @
7bfa86d
...
...
@@ -143,7 +143,7 @@ int st_usleep(st_utime_t usecs)
int
st_sleep
(
int
secs
)
{
return
st_usleep
((
secs
>=
0
)
?
secs
*
(
st_utime_t
)
1000000LL
:
ST_UTIME_NO_TIMEOUT
);
ST_UTIME_NO_TIMEOUT
);
}
...
...
请
注册
或
登录
后发表评论