mirror of
https://github.com/ossrs/srs.git
synced 2025-02-15 04:42:04 +00:00
Merge branch 'srs.master'
This commit is contained in:
commit
6a86537729
1 changed files with 16 additions and 0 deletions
|
@ -55,12 +55,28 @@ int _st_randomize_stacks = 0;
|
||||||
|
|
||||||
static char *_st_new_stk_segment(int size);
|
static char *_st_new_stk_segment(int size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
The below comments is by winlin:
|
||||||
|
The stack memory struct:
|
||||||
|
| REDZONE | stack | extra | REDZONE |
|
||||||
|
+---------+------------------------+---------+---------+
|
||||||
|
| 4k | | 4k/0 | 4k |
|
||||||
|
+---------+------------------------+---------+---------+
|
||||||
|
vaddr bottom top
|
||||||
|
When _st_randomize_stacks is on, by st_randomize_stacks(),
|
||||||
|
the bottom and top will random movided in the extra:
|
||||||
|
long offset = (random() % extra) & ~0xf;
|
||||||
|
ts->stk_bottom += offset;
|
||||||
|
ts->stk_top += offset;
|
||||||
|
Both REDZONE are protected by mprotect when DEBUG is on.
|
||||||
|
*/
|
||||||
_st_stack_t *_st_stack_new(int stack_size)
|
_st_stack_t *_st_stack_new(int stack_size)
|
||||||
{
|
{
|
||||||
_st_clist_t *qp;
|
_st_clist_t *qp;
|
||||||
_st_stack_t *ts;
|
_st_stack_t *ts;
|
||||||
int extra;
|
int extra;
|
||||||
|
|
||||||
|
// TODO: WINLIN: remove the stack reuse.
|
||||||
for (qp = _st_free_stacks.next; qp != &_st_free_stacks; qp = qp->next) {
|
for (qp = _st_free_stacks.next; qp != &_st_free_stacks; qp = qp->next) {
|
||||||
ts = _ST_THREAD_STACK_PTR(qp);
|
ts = _ST_THREAD_STACK_PTR(qp);
|
||||||
if (ts->stk_size >= stack_size) {
|
if (ts->stk_size >= stack_size) {
|
||||||
|
|
Loading…
Reference in a new issue