mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 18:55:19 +00:00 
			
		
		
		
	Merged revisions 49457,49460-49461 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r49457 | kpfleming | 2007-01-04 12:05:47 -0600 (Thu, 04 Jan 2007) | 2 lines make building of codec_gsm against the system GSM library actually work ........ r49460 | kpfleming | 2007-01-04 12:16:40 -0600 (Thu, 04 Jan 2007) | 2 lines don't define this type either if LOW_MEMORY is enabled ........ r49461 | kpfleming | 2007-01-04 12:17:01 -0600 (Thu, 04 Jan 2007) | 2 lines don't do frame header caching in the core if LOW_MEMORY is defined ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@49463 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		
							
								
								
									
										17
									
								
								main/frame.c
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								main/frame.c
									
									
									
									
									
								
							| @@ -49,6 +49,7 @@ static int headers; | ||||
| static AST_LIST_HEAD_STATIC(headerlist, ast_frame); | ||||
| #endif | ||||
|  | ||||
| #if !defined(LOW_MEMORY) | ||||
| static void frame_cache_cleanup(void *data); | ||||
|  | ||||
| /*! \brief A per-thread cache of frame headers */ | ||||
| @@ -73,6 +74,7 @@ struct ast_frame_cache { | ||||
| 	struct ast_frames list; | ||||
| 	size_t size; | ||||
| }; | ||||
| #endif | ||||
|  | ||||
| #define SMOOTHER_SIZE 8000 | ||||
|  | ||||
| @@ -288,6 +290,8 @@ void ast_smoother_free(struct ast_smoother *s) | ||||
| static struct ast_frame *ast_frame_header_new(void) | ||||
| { | ||||
| 	struct ast_frame *f; | ||||
|  | ||||
| #if !defined(LOW_MEMORY) | ||||
| 	struct ast_frame_cache *frames; | ||||
|  | ||||
| 	if ((frames = ast_threadstorage_get(&frame_cache, sizeof(*frames)))) { | ||||
| @@ -300,6 +304,7 @@ static struct ast_frame *ast_frame_header_new(void) | ||||
| 			return f; | ||||
| 		} | ||||
| 	} | ||||
| #endif | ||||
|  | ||||
| 	if (!(f = ast_calloc_cache(1, sizeof(*f)))) | ||||
| 		return NULL; | ||||
| @@ -315,6 +320,7 @@ static struct ast_frame *ast_frame_header_new(void) | ||||
| 	return f; | ||||
| } | ||||
|  | ||||
| #if !defined(LOW_MEMORY) | ||||
| static void frame_cache_cleanup(void *data) | ||||
| { | ||||
| 	struct ast_frame_cache *frames = data; | ||||
| @@ -325,12 +331,14 @@ static void frame_cache_cleanup(void *data) | ||||
| 	 | ||||
| 	free(frames); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| void ast_frame_free(struct ast_frame *fr, int cache) | ||||
| { | ||||
| 	if (!fr->mallocd) | ||||
| 		return; | ||||
|  | ||||
| #if !defined(LOW_MEMORY) | ||||
| 	if (cache && fr->mallocd == AST_MALLOCD_HDR) { | ||||
| 		/* Cool, only the header is malloc'd, let's just cache those for now  | ||||
| 		 * to keep things simple... */ | ||||
| @@ -343,6 +351,7 @@ void ast_frame_free(struct ast_frame *fr, int cache) | ||||
| 			return; | ||||
| 		} | ||||
| 	} | ||||
| #endif | ||||
| 	 | ||||
| 	if (fr->mallocd & AST_MALLOCD_DATA) { | ||||
| 		if (fr->data)  | ||||
| @@ -426,11 +435,14 @@ struct ast_frame *ast_frisolate(struct ast_frame *fr) | ||||
|  | ||||
| struct ast_frame *ast_frdup(const struct ast_frame *f) | ||||
| { | ||||
| 	struct ast_frame_cache *frames; | ||||
| 	struct ast_frame *out = NULL; | ||||
| 	int len, srclen = 0; | ||||
| 	void *buf = NULL; | ||||
|  | ||||
| #if !defined(LOW_MEMORY) | ||||
| 	struct ast_frame_cache *frames; | ||||
| #endif | ||||
|  | ||||
| 	/* Start with standard stuff */ | ||||
| 	len = sizeof(*out) + AST_FRIENDLY_OFFSET + f->datalen; | ||||
| 	/* If we have a source, add space for it */ | ||||
| @@ -443,6 +455,7 @@ struct ast_frame *ast_frdup(const struct ast_frame *f) | ||||
| 	if (srclen > 0) | ||||
| 		len += srclen + 1; | ||||
| 	 | ||||
| #if !defined(LOW_MEMORY) | ||||
| 	if ((frames = ast_threadstorage_get(&frame_cache, sizeof(*frames)))) { | ||||
| 		AST_LIST_TRAVERSE_SAFE_BEGIN(&frames->list, out, frame_list) { | ||||
| 			if (out->mallocd_hdr_len >= len) { | ||||
| @@ -457,6 +470,8 @@ struct ast_frame *ast_frdup(const struct ast_frame *f) | ||||
| 		} | ||||
| 		AST_LIST_TRAVERSE_SAFE_END | ||||
| 	} | ||||
| #endif | ||||
|  | ||||
| 	if (!buf) { | ||||
| 		if (!(buf = ast_calloc_cache(1, len))) | ||||
| 			return NULL; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user