diff options
| author | Mattias Andrée <maandree@kth.se> | 2019-04-13 00:47:00 +0200 | 
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2019-04-13 00:47:00 +0200 | 
| commit | 40c046fb04e8dfaf50c75a291105a8558b9aae11 (patch) | |
| tree | b409fde300d048886a8288e0606ec0e98ce0bb6a | |
| parent | README: LD_PRELOAD (diff) | |
| download | liberror-backtrace-40c046fb04e8dfaf50c75a291105a8558b9aae11.tar.gz liberror-backtrace-40c046fb04e8dfaf50c75a291105a8558b9aae11.tar.bz2 liberror-backtrace-40c046fb04e8dfaf50c75a291105a8558b9aae11.tar.xz | |
Enable prefetching backtace
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
| -rw-r--r-- | config.mk | 2 | ||||
| -rw-r--r-- | internal.h | 3 | ||||
| -rw-r--r-- | save_backtrace.c | 12 | 
3 files changed, 13 insertions, 4 deletions
| @@ -2,5 +2,5 @@ PREFIX    = /usr  MANPREFIX = $(PREFIX)/share/man  CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -CFLAGS   = -std=c99 -Wall -pedantic +CFLAGS   = -std=c11 -Wall -pedantic  LDFLAGS  = -s -lunwind -ldw -lerror @@ -21,5 +21,8 @@ struct liberror_backtrace {  }; +extern _Thread_local struct liberror_backtrace *liberror_saved_backtrace; + +  void liberror_print_backtrace(struct liberror_error *, FILE *, const char *);  int liberror_save_backtrace(struct liberror_error *); diff --git a/save_backtrace.c b/save_backtrace.c index e366abf..7214fa4 100644 --- a/save_backtrace.c +++ b/save_backtrace.c @@ -53,9 +53,15 @@ liberror_save_backtrace(struct liberror_error *error)  	ret = 0;  out: -	if (error->backtrace && !--error->backtrace->refcount) -		free(error->backtrace); -	error->backtrace = backtrace; +	if (error) { +		if (error->backtrace && !--error->backtrace->refcount) +			free(error->backtrace); +		error->backtrace = backtrace; +	} else { +		if (liberror_saved_backtrace && !--liberror_saved_backtrace->refcount) +			free(liberror_saved_backtrace); +		liberror_saved_backtrace = backtrace; +	}  	errno = saved_errno;  	return ret;  } | 
