X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindow.C;h=6ad64376e6b3e47839d20d5adae6fdd49d495d3a;hb=eecf057a9d6b8c8cffc7d0001bff89bc9cac7b05;hp=9731b4bbcb089d48aec86b183b3bf423c9dd3c9c;hpb=df72ca6732207dc25472a23169ff79ef6d4cca1c;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/mwindow.C b/cinelerra-5.1/cinelerra/mwindow.C index 9731b4bb..6ad64376 100644 --- a/cinelerra-5.1/cinelerra/mwindow.C +++ b/cinelerra-5.1/cinelerra/mwindow.C @@ -471,6 +471,7 @@ void MWindow::init_defaults(BC_Hash* &defaults, char *config_path) else create_defaults_path(path, CONFIG_FILE); + delete defaults; defaults = new BC_Hash(path); defaults->load(); } @@ -746,17 +747,17 @@ void MWindow::add_plugins(ArrayList &plugins) void MWindow::init_plugin_tips(ArrayList &plugins, const char *lang) { - const char *cfg_path = File::get_cindat_path(); + const char *dat_path = File::get_cindat_path(); char msg_path[BCTEXTLEN]; FILE *fp = 0; if( BC_Resources::language[0] ) { snprintf(msg_path, sizeof(msg_path), "%s/info/plugins.%s", - cfg_path, lang); + dat_path, lang); fp = fopen(msg_path, "r"); } if( !fp ) { snprintf(msg_path, sizeof(msg_path), "%s/info/plugins.txt", - cfg_path); + dat_path); fp = fopen(msg_path, "r"); } if( !fp ) return; @@ -2263,32 +2264,37 @@ void MWindow::test_plugins(EDL *new_edl, char *path) } -void MWindow::init_shm() +void MWindow::init_shm(const char *pfn, int64_t min) { + int64_t result = 0; // Fix shared memory - FILE *fd = fopen("/proc/sys/kernel/shmmax", "w"); - if(fd) { - fprintf(fd, "0x7fffffff"); + FILE *fd = fopen(pfn, "r"); + if( fd ) { + fscanf(fd, "%jd", &result); fclose(fd); + if( result >= min ) return; } - fd = 0; - fd = fopen("/proc/sys/kernel/shmmax", "r"); - if(!fd) { - MainError::show_error("MWindow::init_shm: couldn't open /proc/sys/kernel/shmmax for reading.\n"); + fd = fopen(pfn, "w"); + if( !fd ) return; + fprintf(fd, "0x%jx", min); + fclose(fd); + + fd = fopen(pfn, "r"); + if( !fd ) { + eprintf(_("MWindow::init_shm: couldn't open %s for reading.\n"), pfn); return; } - int64_t result = 0; fscanf(fd, "%jd", &result); fclose(fd); - fd = 0; - if(result < 0x7fffffff) { - eprintf(_("MWindow::init_shm: /proc/sys/kernel/shmmax is %p.\n" + if( result < min ) { + eprintf(_("MWindow::init_shm: %s is %p.\n" "you probably need to be root, or:\n" - "as root, run: echo 0x7fffffff > /proc/sys/kernel/shmmax\n" + "as root, run: echo 0x%jx > %s\n" "before trying to start cinelerra.\n" - "It should be at least 0x7fffffff for Cinelerra.\n"), (void *)result); + "It should be at least 0x%jx for Cinelerra.\n"), + pfn, (void *)result, min, pfn, min); } } @@ -2473,7 +2479,8 @@ void MWindow::create_objects(int want_gui, &MWindowGUI::keyboard_listener); hide_splash(); - init_shm(); + init_shm("/proc/sys/kernel/shmmax", 0x7fffffff); + init_shm("/proc/sys/kernel/shmmni", 0x4000); if(debug) PRINT_TRACE BC_WindowBase::get_resources()->vframe_shm = 1;