/* Android does not have execinfo.h. It has unwind.h instead. */
void *array[20];
char **strings;
- int size, i;
+ int size, i, len;
int strsize = 0, strcursor = 0;
size = backtrace (array, 20);
strsize += strlen (strings[i]);
retstr = malloc (sizeof (char) * (strsize + 1));
- for (i = 0; i < size; i++) {
- int len = strlen (strings[i]);
- memcpy (retstr + strcursor, strings[i], len);
- strcursor += len;
+ if (retstr) {
+ for (i = 0; i < size; i++) {
+ len = strlen (strings[i]);
+ memcpy (retstr + strcursor, strings[i], len);
+ strcursor += len;
+ }
+
+ retstr[strsize] = '\0';
}
- retstr[strsize] = '\0';
- }
- free (strings);
+ free (strings);
+ }
#else
retstr = strdup ("Android-nnstreamer does not support backtrace.\n");
#endif
#define GST_ELEMENT_ERROR_BTRACE(s, errtype, errcode, mesg) do { \
char *btrace = _backtrace_to_string (); \
- GST_ELEMENT_ERROR (s, errtype, errcode, mesg, ("%s", btrace)); \
- free (btrace); \
+ if (btrace) { \
+ GST_ELEMENT_ERROR (s, errtype, errcode, mesg, ("%s", btrace)); \
+ free (btrace); \
+ } \
} while (0)
#define ml_logf_stacktrace(...) do { \
char *btrace = _backtrace_to_string (); \
- ml_loge ("%s\n", btrace); \
- free (btrace); \
+ if (btrace) { \
+ ml_loge ("%s\n", btrace); \
+ free (btrace); \
+ } \
ml_logf (__VA_ARGS__); \
} while (0)
#define ml_log_stacktrace(logfunc, ...) do { \
char *btrace = _backtrace_to_string (); \
- logfunc ("%s\n", btrace); \
- free (btrace); \
+ if (btrace) { \
+ logfunc ("%s\n", btrace); \
+ free (btrace); \
+ } \
logfunc (__VA_ARGS__); \
} while (0)
#define ml_loge_stacktrace(...) ml_log_stacktrace(ml_loge, __VA_ARGS__)