Commit Graph

74 Commits (bf029ed564e86dbe1dd22047c8dd77b631e5d77e)

Author SHA1 Message Date
Winlin 8f48a0e2d1
ASAN: Support coroutine context switching and stack tracing (#4153)
For coroutine, we should use `__sanitizer_start_switch_fiber` which
similar to`VALGRIND_STACK_REGISTER`, see
https://github.com/google/sanitizers/issues/189#issuecomment-1346243598
for details. If not fix this, asan will output warning:

```
==72269==WARNING: ASan is ignoring requested __asan_handle_no_return: stack type: default top: 0x00016f638000; bottom 0x000106bec000; size: 0x000068a4c000 (1755627520)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
```

It will cause asan failed to get the stack, see
`research/st/asan-switch.cpp` for example:

```
==71611==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x000103600733 at pc 0x0001009d3d7c bp 0x000100b4bd40 sp 0x000100b4bd38
WRITE of size 1 at 0x000103600733 thread T0
    #0 0x1009d3d78 in foo(void*) asan-switch.cpp:13
```

After fix this issue, it should provide the full stack when crashing:

```
==73437==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x000103300733 at pc 0x000100693d7c bp 0x00016f76f550 sp 0x00016f76f548
WRITE of size 1 at 0x000103300733 thread T0
    #0 0x100693d78 in foo(void*) asan-switch.cpp:13
    #1 0x100693df4 in main asan-switch.cpp:23
    #2 0x195aa20dc  (<unknown module>)
```

For primordial coroutine, if not set the stack by
`st_set_primordial_stack`, then the stack is NULL and asan can't get the
stack tracing. Note that it's optional and only make it fail to display
the stack information, no other errors.

---

Co-authored-by: john <hondaxiao@tencent.com>
6 months ago
winlin 55610cf689 ST: Refine switch context. 6 months ago
Winlin ff6a608099
ST: Replace macros with explicit code for better understanding. v7.0.7 (#4149)
Improvements for ST(State Threads):

1. ST: Use g++ for CXX compiler.
2. ST: Remove macros for clist.
3. ST: Remove macros for global thread and vp.
4. ST: Remove macros for vp queue operations.
5. ST: Remove macros for context switch.
6. ST: Remove macros for setjmp/longjmp.
7. ST: Remove macro for stack pad.
8. ST: Refine macro for valgrind.

---------

Co-authored-by: Jacob Su <suzp1984@gmail.com>
6 months ago
Winlin 23d2602c34
UniquePtr: Support SrsUniquePtr to replace SrsAutoFree. v6.0.136 (#4109)
To manage an object:

```cpp
// Before
MyClass* ptr = new MyClass();
SrsAutoFree(MyClass, ptr);
ptr->do_something();

// Now
SrsUniquePtr<MyClass> ptr(new MyClass());
ptr->do_something();
```

To manage an array of objects:

```cpp
// Before
char* ptr = new char[10];
SrsAutoFreeA(char, ptr);
ptr[0] = 0xf;

// Now
SrsUniquePtr<char[]> ptr(new char[10]);
ptr[0] = 0xf;
```

In fact, SrsUniquePtr is a limited subset of SrsAutoFree, mainly
managing pointers and arrays. SrsUniquePtr is better than SrsAutoFree
because it has the same API to standard unique ptr.

```cpp
SrsUniquePtr<MyClass> ptr(new MyClass());
ptr->do_something();
MyClass* p = ptr.get();
```

SrsAutoFree actually uses a pointer to a pointer, so it can be set to
NULL, allowing the pointer's value to be changed later (this usage is
different from SrsUniquePtr).

```cpp
// OK to free ptr correctly.
MyClass* ptr;
SrsAutoFree(MyClass, ptr);
ptr = new MyClass();

// Crash because ptr is an invalid pointer.
MyClass* ptr;
SrsUniquePtr<MyClass> ptr(ptr);
ptr = new MyClass();
```

Additionally, SrsAutoFreeH can use specific release functions, which
SrsUniquePtr does not support.

---------

Co-authored-by: Jacob Su <suzp1984@gmail.com>
8 months ago
Winlin 7ab012c60f
SmartPtr: Support detect memory leak by valgrind. v6.0.132 (#4102)
1. Support detect memory leak by valgrind.
2. Free the http handler entry.
3. Free the stack of ST.

---

Co-authored-by: Jacob Su <suzp1984@gmail.com>
8 months ago
winlin 2a2da2253f Switch to 2013-2024. v6.0.109 1 year ago
winlin c46ef81ff2 SRS5: Update license date to 2023. v5.0.123
PICK 72f8ed4916
2 years ago
chengh 6fa17aa3f8 ST: Support st_destroy to free resources for asan. 2 years ago
winlin 5a1a234855 ST: Refine tools and CMakeLists.txt. Add backtrace example. v5.0.79 2 years ago
winlin dc20d5ddbc ST: Support set context id while thread running. v5.0.72 2 years ago
winlin 297a104fef Update state-threads to v1.9.4. 3 years ago
winlin eb2056db25 ST: Define and use a new jmpbuf. v5.0.57 3 years ago
winlin e9d6601f7d For #2136: API: Cleanup no active streams for statistics. v5.0.42 3 years ago
ChenGH f2fa289fe8 AppleM1: Support Apple Silicon M1(aarch64). 3 years ago
winlin 1589858cb0 Support MIPS 64bits for loongson 3A4000/3B3000. v5.0.34 3 years ago
winlin f7280399d4 Merge 4.0release, migrate to new website. 3 years ago
Steven Liu 08c4b25030 RISCV: Patch ST and libsrtp. #3115 3 years ago
winlin 339d3b31cc ST: Support thread-local for multiple threads.
1. All statick and global variables is thread-local.
2. Call st_init() to init st for each thread.
3. Notice that ST is isolate for threads.
3 years ago
winlin 4110fb14cb Squash: Fix bugs. v5.0.20 3 years ago
winlin 56a9e4d140 Change images from gitee to ossrs.net 3 years ago
winlin 5b44cc6a17 For #2689, Support loongarch, loongson CPU. v5.0.19 3 years ago
winlin 596dd8c523 Support daemon(fork twice) for Darwin/OSX. v5.0.18 3 years ago
winlin 8ea9783de7 OpenWRT: Disable mprotect of ST. 5.0.16 3 years ago
winlin 1836847269 ST: Support Cygwin64 and MIPS 3 years ago
winlin 983d521987 API: Use libuuid to generate uuid. v5.0.9 4 years ago
winlin 6ddef894d9 ST: Refine OSX asm. 4 years ago
winlin 442cf615c0 ST: Simplify it, only Linux/Darwin, epoll/kqueue, single process. 5.0.2
commit f4872e528cad07f8ea683cc8cb26e34111bad1b5
Author: winlin <winlin@vip.126.com>
Date:   Fri Feb 26 09:13:21 2021 +0800

    ST: For #2188: Remove sendmmsg from ST.

commit aaeb8919bd4a026268e0600398cb1e9ad477663f
Author: winlin <winlin@vip.126.com>
Date:   Thu Mar 11 08:09:54 2021 +0800

    ST: Refine utest script.

commit d1ac9da53060b6bfa82b5d041da4c2ad9bd6b90a
Author: winlin <winlin@vip.126.com>
Date:   Wed Mar 3 11:02:25 2021 +0800

    ST: Support fast utest and coverage

commit 8400115b83c022e33f59422dbf6d85ee46fb9edb
Author: winlin <winlin@vip.126.com>
Date:   Fri Feb 26 07:02:19 2021 +0800

    ST: Always use unserialized accept for linux or darwin

commit c3686f2bca80d2c139239b08975575b1bb981ffa
Author: winlin <winlin@vip.126.com>
Date:   Fri Feb 26 06:54:05 2021 +0800

    ST: Refine ARFLAGS by disable the verbose log

commit aaa5c4f863eba278c4ed2b29a46297fb01a4ed63
Author: winlin <winlin@vip.126.com>
Date:   Thu Feb 25 08:58:46 2021 +0800

    ST: Stack always grows from top to down.

commit dddd466e5c2e418c6f4896cd8bf701130052b3d9
Author: winlin <winlin@vip.126.com>
Date:   Thu Feb 25 08:51:31 2021 +0800

    ST: Ignore process fork, for single process only

commit 7906cb5f6e78c916cb8b8d9522275bfc086bb6a3
Author: winlin <winlin@vip.126.com>
Date:   Thu Feb 25 08:50:59 2021 +0800

    ST: Fix build warnings

commit d94921b84a3b6cf88ace2c766cc2bfedb9c0602e
Author: winlin <winlin@vip.126.com>
Date:   Thu Feb 25 07:27:45 2021 +0800

    ST: Remove select and poll support, only epoll and kqueue

commit 76d202514615f78d1a8f2b15778f3dac5abf4abb
Author: winlin <winlin@vip.126.com>
Date:   Thu Feb 25 07:10:47 2021 +0800

    ST: Remove multiple OS support, except Linux and Darwin.

commit 13c4ba345c61170e86dde486a174378ca235f442
Author: winlin <winlin@vip.126.com>
Date:   Thu Feb 25 06:59:35 2021 +0800

    ST: Remove __ia64__ CPU support

commit 46c06e4a11879cfeb828382e44f11287782ce4b5
Author: winlin <winlin@vip.126.com>
Date:   Wed Feb 24 11:37:27 2021 +0800

    ST: Remove unused files for ST
4 years ago
winlin 1ee77614fb Refine comments 4 years ago
winlin bb37a5550c Test: Update srs-bench 4 years ago
winlin 7d12c3641a Merge ST, support utest and coverage by gtest. 4 years ago
winlin cec588e08a For #2188: Remove sendmmsg from ST. 4 years ago
winlin 34dae0fe0d For #2188: Remove sendmmsg from ST. 4 years ago
winlin 0fe031a156 Support to disable stats by default 4 years ago
winlin a049ce3fb7 For #2194, Core: Refine yield for high performance timer. 4 years ago
winlin b4b9776b02 Core: Support yield current coroutine for high performance timer. 4 years ago
winlin d8563398b2 Clock: Update stat. Insert timer to execute first 4 years ago
winlin 9db7126eb4 Core: Refine ST stat for thread switch 4 years ago
winlin 15f7fa2c36 Core: Refine ST stat for io events 4 years ago
winlin 12d7e57011 Core: Refine sched and clock stat 4 years ago
winlin 70fb647ac9 Perf: Add stat for sched of ST. 4 years ago
winlin e91e0eaf46 Perf: Add stat for io of ST. 4 years ago
winlin 25be6d6bc0 Support to disable stats by default 4 years ago
winlin a04dd7ed30 For #2194, Core: Refine yield for high performance timer. 4 years ago
winlin 79f9cd6b3a Core: Support yield current coroutine for high performance timer. 4 years ago
winlin 321f555e30 Clock: Update stat. Insert timer to execute first 4 years ago
winlin 71cc8e35d9 Core: Refine ST stat for thread switch 4 years ago
winlin e726aba8f9 Core: Refine ST stat for io events 4 years ago
winlin cde456710d Core: Refine sched and clock stat 4 years ago
winlin a46debb4bb Perf: Add stat for sched of ST. 4 years ago
winlin 7b913b1115 Perf: Add stat for io of ST. 4 years ago