[LEDE-DEV] [PATCH 2/3] [ubox] syslog: change log buffer size

John Crispin john at phrozen.org
Fri Jun 3 04:48:48 PDT 2016



On 03/06/2016 12:59, Dan Bugnar wrote:
> Change the log buffer size and copy the messages.
> Copy the messages from the oldest to newest using the log_list.
> First time we calculate the size of the all entries. The log_entries_size
> calculates the size indifferent of the positions of the newest and oldest.
> 
> If we want to increase the log buffer size is simple, we just copy from the oldest
> message to the newest all the messages into the new buffer.
> 
> In case we shrink the buffer we go over messages and decrease the entries size
> with the size of each message until the entries size is less or equal to the new
> size we allocate the new buffer.
> 
> Signed-off-by: Dan Bugnar <danutbug at gmail.com>
> ---
>  log/syslog.c | 36 +++++++++++++++++++++++++++---------
>  log/syslog.h |  2 +-
>  2 files changed, 28 insertions(+), 10 deletions(-)
> 
> diff --git a/log/syslog.c b/log/syslog.c
> index 2042e93..e24c678 100644
> --- a/log/syslog.c
> +++ b/log/syslog.c
> @@ -42,7 +42,7 @@
>  #define PAD(x) (x % 4) ? (((x) - (x % 4)) + 4) : (x)
>  
>  static char *log_dev = LOG_DEFAULT_SOCKET;
> -static int log_size = LOG_DEFAULT_SIZE;
> +static int log_size = 0;

static dont get defined to 0

>  static struct log_head *log, *log_end, *oldest, *newest;
>  static int current_id = 0;
>  static regex_t pat_prio;
> @@ -213,6 +213,15 @@ syslog_open(void)
>  	return 0;
>  }
>  
> +static inline int 
> +log_entries_size()

void prototype ?

> +{
> +	if (newest > oldest)
> +		return (newest - oldest);
> +	else
> +		return (log_end - oldest + newest - log);
> +}
> +
>  struct log_head*
>  log_list(int count, struct log_head *h)
>  {
> @@ -237,26 +246,38 @@ log_list(int count, struct log_head *h)
>  }
>  
>  int
> -log_buffer_init(int size)
> +log_buffer_reinit(int size)
>  {
> +	if (size <= 0)
> +		size = LOG_DEFAULT_SIZE;
> +	if (log_size == size)
> +		return 0;
> +

code before variable declarations ? did this compile without warning ?

>  	struct log_head *_log = malloc(size);
>  
>  	if (!_log) {
> +		oldest = newest = log = NULL;
>  		fprintf(stderr, "Failed to initialize log buffer with size %d\n", log_size);
>  		return -1;
>  	}
>  
>  	memset(_log, 0, size);
>  
> -	if (log && ((log_size + sizeof(struct log_head)) < size)) {
> +	if (log) {
>  		struct log_head *start = _log;
>  		struct log_head *end = ((void*) _log) + size;
>  		struct log_head *l;
> +		int entries_size = log_entries_size();
>  
>  		l = log_list(0, NULL);
>  		while ((start < end) && l && l->size) {
> -			memcpy(start, l, PAD(sizeof(struct log_head) + l->size));
> -			start = (struct log_head *) &l->data[PAD(l->size)];
> +			int copy_len = PAD(sizeof(struct log_head)) + l->size;
> +			if (entries_size < size) {
> +				memcpy(start, l, copy_len);
> +				start = (struct log_head *) &start->data[l->size];
> +			} else{
> +				entries_size -= copy_len;
> +			}
>  			l = log_list(0, l);
>  		}
>  		free(log);
> @@ -276,13 +297,10 @@ log_buffer_init(int size)
>  void
>  log_init(int _log_size)
>  {
> -	if (_log_size > 0)
> -		log_size = _log_size;

what happened to log_size ? if you dont use it anymore remove it fully
please

> -
you are removing a blank like here


>  	regcomp(&pat_prio, "^<([0-9]*)>(.*)", REG_EXTENDED);
>  	regcomp(&pat_tstamp, "^\[[ 0]*([0-9]*).([0-9]*)] (.*)", REG_EXTENDED);
>  
> -	if (log_buffer_init(log_size)) {
> +	if (log_buffer_reinit(_log_size)) {
>  		fprintf(stderr, "Failed to allocate log memory\n");
>  		exit(-1);
>  	}
> diff --git a/log/syslog.h b/log/syslog.h
> index 81a039f..ed5a41b 100644
> --- a/log/syslog.h
> +++ b/log/syslog.h
> @@ -35,7 +35,7 @@ void log_shutdown(void);
>  
>  typedef void (*log_list_cb)(struct log_head *h);
>  struct log_head* log_list(int count, struct log_head *h);
> -int log_buffer_init(int size);
> +int log_buffer_reinit(int size);
>  void log_add(char *buf, int size, int source);
>  void ubus_notify_log(struct log_head *l);
>  
> 



More information about the Lede-dev mailing list