diff --git a/glava-obs/entry.c b/glava-obs/entry.c index 8d8ab36..cdc9dd2 100644 --- a/glava-obs/entry.c +++ b/glava-obs/entry.c @@ -76,7 +76,7 @@ struct mod_state { gs_texture_t* gs_tex; unsigned int old_tex; struct { - const char* opts; + char* opts; int w, h; } cfg; }; @@ -182,8 +182,12 @@ static void update(void* data, obs_data_t* settings) { s->cfg.w = (int) obs_data_get_int(settings, "width"); s->cfg.h = (int) obs_data_get_int(settings, "height"); const char* opts = obs_data_get_string(settings, "options"); - bool opts_changed = s->cfg.opts == NULL || strcmp(opts, s->cfg.opts) != 0; - s->cfg.opts = opts; + printf("debug: input str '%s', set '%s'\n", opts, s->cfg.opts); + bool opts_changed = s->cfg.opts == NULL || strcmp(opts, s->cfg.opts); + if (s->cfg.opts != NULL) { + free(s->cfg.opts); + } + s->cfg.opts = strdup(opts); if (opts_changed) { blog(LOG_INFO, "Updating GLava state"); diff --git a/glava/glsl_ext.c b/glava/glsl_ext.c index 1711bf6..2e0c7ce 100644 --- a/glava/glsl_ext.c +++ b/glava/glsl_ext.c @@ -212,6 +212,7 @@ static struct schar directive(struct glsl_ext* ext, char** args, ext_process(&next, target); inherit(ext, &next); munmap(map, st.st_size); + close(fd); ext->ss_lookup = next.ss_lookup; diff --git a/glava/pulse_input.c b/glava/pulse_input.c index 198e20d..c599454 100644 --- a/glava/pulse_input.c +++ b/glava/pulse_input.c @@ -89,10 +89,8 @@ static void init(struct audio_data* audio) { exit(EXIT_FAILURE); } - + pa_mainloop_run(m_pulseaudio_mainloop, &ret); - - } /* Sample format for native 'float' type */ diff --git a/glava/render.c b/glava/render.c index 6399241..8fff3f0 100644 --- a/glava/render.c +++ b/glava/render.c @@ -888,18 +888,26 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, const char* backend = force_backend; /* Window creation backend interfaces */ + + if (wcbs_idx == 0) { + #ifdef GLAVA_GLFW + DECL_WCB(wcb_glfw); + #endif + #ifdef GLAVA_GLX + DECL_WCB(wcb_glx); + #endif + } + #ifdef GLAVA_GLFW - DECL_WCB(wcb_glfw); if (!forced) backend = "glfw"; #endif - + #ifdef GLAVA_GLX - DECL_WCB(wcb_glx); if (!forced && getenv("DISPLAY")) { backend = "glx"; } #endif - + if (!backend) { fprintf(stderr, "No backend available for the active windowing system\n"); if (wcbs_idx == 0) { @@ -1269,6 +1277,7 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, ext_free(&ext); munmap((void*) map, st.st_size); + close(fd); if (auto_desktop) { if (env) { @@ -1305,6 +1314,7 @@ struct glava_renderer* rd_new(const char** paths, const char* entry, loading_presets = false; munmap((void*) map, st.st_size); + close(fd); } else { fprintf(stderr, "Failed to detect the desktop environment! " "Is the window manager EWMH compliant?");