mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	SmartPtr: Support load test for source by srs-bench. v6.0.130 (#4097)
1. Add live benchmark support in srs-bench, which only connects and disconnects without any media transport, to test source creation and disposal and verify source memory leaks. 2. SmartPtr: Support cleanup of HTTP-FLV stream. Unregister the HTTP-FLV handler for the pattern and clean up the objects and resources. 3. Support benchmarking RTMP/SRT with srs-bench by integrating the gosrt and oryx RTMP libraries. 4. Refine SRT and RTC sources by using a timer to clean up the sources, following the same strategy as the Live source. --------- Co-authored-by: Haibo Chen <495810242@qq.com> Co-authored-by: Jacob Su <suzp1984@gmail.com>
This commit is contained in:
		
							parent
							
								
									e3d74fb045
								
							
						
					
					
						commit
						1f9309ae25
					
				
					 508 changed files with 6805 additions and 3299 deletions
				
			
		
							
								
								
									
										21
									
								
								trunk/3rdparty/srs-bench/vendor/github.com/mattn/go-pointer/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								trunk/3rdparty/srs-bench/vendor/github.com/mattn/go-pointer/LICENSE
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| The MIT License (MIT) | ||||
| 
 | ||||
| Copyright (c) 2019 Yasuhiro Matsumoto | ||||
| 
 | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
| 
 | ||||
| The above copyright notice and this permission notice shall be included in all | ||||
| copies or substantial portions of the Software. | ||||
| 
 | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
| SOFTWARE. | ||||
							
								
								
									
										29
									
								
								trunk/3rdparty/srs-bench/vendor/github.com/mattn/go-pointer/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								trunk/3rdparty/srs-bench/vendor/github.com/mattn/go-pointer/README.md
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| # go-pointer | ||||
| 
 | ||||
| Utility for cgo | ||||
| 
 | ||||
| ## Usage | ||||
| 
 | ||||
| https://github.com/golang/proposal/blob/master/design/12416-cgo-pointers.md | ||||
| 
 | ||||
| In go 1.6, cgo argument can't be passed Go pointer. | ||||
| 
 | ||||
| ``` | ||||
| var s string | ||||
| C.pass_pointer(pointer.Save(&s)) | ||||
| v := *(pointer.Restore(C.get_from_pointer()).(*string)) | ||||
| ``` | ||||
| 
 | ||||
| ## Installation | ||||
| 
 | ||||
| ``` | ||||
| go get github.com/mattn/go-pointer | ||||
| ``` | ||||
| 
 | ||||
| ## License | ||||
| 
 | ||||
| MIT | ||||
| 
 | ||||
| ## Author | ||||
| 
 | ||||
| Yasuhiro Matsumoto (a.k.a mattn) | ||||
							
								
								
									
										1
									
								
								trunk/3rdparty/srs-bench/vendor/github.com/mattn/go-pointer/doc.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								trunk/3rdparty/srs-bench/vendor/github.com/mattn/go-pointer/doc.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| package pointer | ||||
							
								
								
									
										57
									
								
								trunk/3rdparty/srs-bench/vendor/github.com/mattn/go-pointer/pointer.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								trunk/3rdparty/srs-bench/vendor/github.com/mattn/go-pointer/pointer.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | |||
| package pointer | ||||
| 
 | ||||
| // #include <stdlib.h> | ||||
| import "C" | ||||
| import ( | ||||
| 	"sync" | ||||
| 	"unsafe" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	mutex sync.RWMutex | ||||
| 	store = map[unsafe.Pointer]interface{}{} | ||||
| ) | ||||
| 
 | ||||
| func Save(v interface{}) unsafe.Pointer { | ||||
| 	if v == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	// Generate real fake C pointer. | ||||
| 	// This pointer will not store any data, but will bi used for indexing purposes. | ||||
| 	// Since Go doest allow to cast dangling pointer to unsafe.Pointer, we do rally allocate one byte. | ||||
| 	// Why we need indexing, because Go doest allow C code to store pointers to Go data. | ||||
| 	var ptr unsafe.Pointer = C.malloc(C.size_t(1)) | ||||
| 	if ptr == nil { | ||||
| 		panic("can't allocate 'cgo-pointer hack index pointer': ptr == nil") | ||||
| 	} | ||||
| 
 | ||||
| 	mutex.Lock() | ||||
| 	store[ptr] = v | ||||
| 	mutex.Unlock() | ||||
| 
 | ||||
| 	return ptr | ||||
| } | ||||
| 
 | ||||
| func Restore(ptr unsafe.Pointer) (v interface{}) { | ||||
| 	if ptr == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	mutex.RLock() | ||||
| 	v = store[ptr] | ||||
| 	mutex.RUnlock() | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| func Unref(ptr unsafe.Pointer) { | ||||
| 	if ptr == nil { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	mutex.Lock() | ||||
| 	delete(store, ptr) | ||||
| 	mutex.Unlock() | ||||
| 
 | ||||
| 	C.free(ptr) | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue