1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-09-28 21:19:10 +00:00

Fix segfault with no update, debug logging. (#551)

* Fix segfault caused by initiliazed deref.

This fixes #117.

* Revert debug logging changes from a9e968956d.

* Replace not with !.
This commit is contained in:
Brenden Matthews 2018-08-03 12:22:11 -04:00 committed by GitHub
parent 7bca0ca881
commit fb70a9022d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 43 deletions

View File

@ -40,9 +40,7 @@ void font_setting::lua_setter(lua::state &l, bool init) {
Base::lua_setter(l, init); Base::lua_setter(l, init);
if (init && out_to_x.get(*state)) { if (init && out_to_x.get(*state)) {
if (fonts.empty()) { if (fonts.empty()) { fonts.resize(1); }
fonts.resize(1);
}
fonts[0].name = do_convert(l, -1).first; fonts[0].name = do_convert(l, -1).first;
} }
@ -79,19 +77,17 @@ xftalpha_setting xftalpha;
void set_font() { void set_font() {
#ifdef BUILD_XFT #ifdef BUILD_XFT
if (use_xft.get(*state)) { if (use_xft.get(*state)) { return; }
return;
}
#endif /* BUILD_XFT */ #endif /* BUILD_XFT */
if (fonts[selected_font].font != nullptr) { if (fonts.size() > selected_font && fonts[selected_font].font != nullptr &&
window.gc != nullptr) {
XSetFont(display, window.gc, fonts[selected_font].font->fid); XSetFont(display, window.gc, fonts[selected_font].font->fid);
} }
} }
void setup_fonts() { void setup_fonts() {
if (not out_to_x.get(*state)) { DBGP("setting up fonts");
return; if (!out_to_x.get(*state)) { return; }
}
#ifdef BUILD_XFT #ifdef BUILD_XFT
if (use_xft.get(*state)) { if (use_xft.get(*state)) {
if (window.xftdraw != nullptr) { if (window.xftdraw != nullptr) {
@ -106,9 +102,7 @@ void setup_fonts() {
} }
int add_font(const char *data_in) { int add_font(const char *data_in) {
if (not out_to_x.get(*state)) { if (!out_to_x.get(*state)) { return 0; }
return 0;
}
fonts.emplace_back(); fonts.emplace_back();
fonts.rbegin()->name = data_in; fonts.rbegin()->name = data_in;
@ -116,9 +110,7 @@ int add_font(const char *data_in) {
} }
void free_fonts(bool utf8) { void free_fonts(bool utf8) {
if (not out_to_x.get(*state)) { if (!out_to_x.get(*state)) { return; }
return;
}
for (auto &font : fonts) { for (auto &font : fonts) {
#ifdef BUILD_XFT #ifdef BUILD_XFT
if (use_xft.get(*state)) { if (use_xft.get(*state)) {
@ -132,9 +124,7 @@ void free_fonts(bool utf8) {
} else } else
#endif /* BUILD_XFT */ #endif /* BUILD_XFT */
{ {
if (font.font != nullptr) { if (font.font != nullptr) { XFreeFont(display, font.font); }
XFreeFont(display, font.font);
}
if (utf8 && (font.fontset != nullptr)) { if (utf8 && (font.fontset != nullptr)) {
XFreeFontSet(display, font.fontset); XFreeFontSet(display, font.fontset);
} }
@ -151,9 +141,8 @@ void free_fonts(bool utf8) {
} }
void load_fonts(bool utf8) { void load_fonts(bool utf8) {
if (not out_to_x.get(*state)) { DBGP("loading fonts");
return; if (!out_to_x.get(*state)) { return; }
}
for (auto &font : fonts) { for (auto &font : fonts) {
#ifdef BUILD_XFT #ifdef BUILD_XFT
/* load Xft font */ /* load Xft font */
@ -162,9 +151,7 @@ void load_fonts(bool utf8) {
font.xftfont = XftFontOpenName(display, screen, font.name.c_str()); font.xftfont = XftFontOpenName(display, screen, font.name.c_str());
} }
if (font.xftfont != nullptr) { if (font.xftfont != nullptr) { continue; }
continue;
}
NORM_ERR("can't load Xft font '%s'", font.name.c_str()); NORM_ERR("can't load Xft font '%s'", font.name.c_str());
if ((font.xftfont = XftFontOpenName(display, screen, "courier-12")) != if ((font.xftfont = XftFontOpenName(display, screen, "courier-12")) !=

View File

@ -83,7 +83,7 @@ void NORM_ERR(const char *format, Args &&... args) {
/* critical error */ /* critical error */
template <typename... Args> template <typename... Args>
inline void CRIT_ERR(void *memtofree1, void *memtofree2, const char *format, inline void CRIT_ERR(void *memtofree1, void *memtofree2, const char *format,
Args &&... args) { Args &&... args) {
NORM_ERR(format, args...); NORM_ERR(format, args...);
clean_up(memtofree1, memtofree2); clean_up(memtofree1, memtofree2);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
@ -91,7 +91,7 @@ inline void CRIT_ERR(void *memtofree1, void *memtofree2, const char *format,
template <typename... Args> template <typename... Args>
inline void THREAD_CRIT_ERR(void *memtofree1, void *memtofree2, inline void THREAD_CRIT_ERR(void *memtofree1, void *memtofree2,
const char *format, Args &&... args) { const char *format, Args &&... args) {
NORM_ERR(format, args...); NORM_ERR(format, args...);
clean_up_without_threads(memtofree1, memtofree2); clean_up_without_threads(memtofree1, memtofree2);
return; return;
@ -106,21 +106,16 @@ class error : public std::runtime_error {
/* debugging output */ /* debugging output */
extern int global_debug_level; extern int global_debug_level;
template <typename... Args>
inline void __DBGP(const int level, const char *format, Args &&... args) { #define __DBGP(level, ...) \
if (global_debug_level > level) { do { \
fprintf(stderr, "DEBUG(%d) [" __FILE__ ":%d]: ", level, __LINE__); if (global_debug_level > level) { \
gettextize_format(format, args...); fprintf(stderr, "DEBUG(%d) [" __FILE__ ":%d]: ", level, __LINE__); \
fputs("\n", stderr); gettextize_format(__VA_ARGS__); \
} fputs("\n", stderr); \
} } \
template <typename... Args> } while (0)
void DBGP(const char *format, Args &&... args) { #define DBGP(...) __DBGP(0, __VA_ARGS__)
__DBGP(0, format, args...); #define DBGP2(...) __DBGP(1, __VA_ARGS__)
}
template <typename... Args>
void DBGP2(const char *format, Args &&... args) {
__DBGP(1, format, args...);
}
#endif /* _LOGGING_H */ #endif /* _LOGGING_H */