diff --git a/libs/pbd/sndfile_manager.cc b/libs/pbd/sndfile_manager.cc index 4977f21dfd..c3fbd7be5b 100644 --- a/libs/pbd/sndfile_manager.cc +++ b/libs/pbd/sndfile_manager.cc @@ -90,12 +90,16 @@ SndFileDescriptor::open () { /* we must have a lock on the FileManager's mutex */ - int fd = ::open(_path.c_str(), O_LARGEFILE | (_writeable ? (O_RDWR) : O_RDONLY)); + int fd = ::open(_path.c_str(), O_LARGEFILE | (_writeable ? (O_RDWR|O_CREAT) : O_RDONLY)); if (fd == -1) return false; fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); _sndfile = sf_open_fd (fd, _writeable ? SFM_RDWR : SFM_READ, _info, 1); + if (sf_open_fd == 0) { + ::close(fd); + } + return (_sndfile == 0); } diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 9e80554f0b..d02626f4af 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -167,6 +167,10 @@ OSC::start () continue; } + if (!_osc_server) { + return 1; + } + int fd = lo_server_get_socket_fd (_osc_server); fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); @@ -187,9 +191,9 @@ OSC::start () if (_osc_unix_server) { _osc_unix_socket_path = tmpstr; + fd = lo_server_get_socket_fd (_osc_unix_server) + fcntl(fdx, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); } - fd = lo_server_get_socket_fd (_osc_unix_server) - fcntl(fdx, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); } #endif @@ -228,19 +232,23 @@ OSC::thread_init () pthread_set_name (X_("OSC")); if (_osc_unix_server) { + const int fd = lo_server_get_socket_fd (_osc_unix_server); Glib::RefPtr src = IOSource::create (lo_server_get_socket_fd (_osc_unix_server), IO_IN|IO_HUP|IO_ERR); src->connect (sigc::bind (sigc::mem_fun (*this, &OSC::osc_input_handler), _osc_unix_server)); src->attach (_main_loop->get_context()); local_server = src->gobj(); g_source_ref (local_server); + fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); } if (_osc_server) { - Glib::RefPtr src = IOSource::create (lo_server_get_socket_fd (_osc_server), IO_IN|IO_HUP|IO_ERR); + const int fd = lo_server_get_socket_fd (_osc_server); + Glib::RefPtr src = IOSource::create (fd, IO_IN|IO_HUP|IO_ERR); src->connect (sigc::bind (sigc::mem_fun (*this, &OSC::osc_input_handler), _osc_server)); src->attach (_main_loop->get_context()); remote_server = src->gobj(); g_source_ref (remote_server); + fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); } PBD::notify_gui_about_thread_creation (X_("gui"), pthread_self(), X_("OSC"), 2048);