mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-07 22:25:46 +01:00
properly handle VST scan/discover cancellation.
This commit is contained in:
parent
3b8ba073fc
commit
832e02a711
1 changed files with 17 additions and 4 deletions
|
|
@ -347,6 +347,13 @@ vstfx_infofile_path (const char* dllpath, int personal)
|
|||
return Glib::build_filename (dir, s.str ());
|
||||
}
|
||||
|
||||
static void
|
||||
vstfx_remove_infofile (const char *dllpath)
|
||||
{
|
||||
::g_unlink(vstfx_infofile_path (dllpath, 0).c_str());
|
||||
::g_unlink(vstfx_infofile_path (dllpath, 1).c_str());
|
||||
}
|
||||
|
||||
static char *
|
||||
vstfx_infofile_stat (const char *dllpath, struct stat* statbuf, int personal)
|
||||
{
|
||||
|
|
@ -740,8 +747,6 @@ vstfx_get_info (const char* dllpath, int type, enum VSTScanMode mode)
|
|||
|
||||
PBD::SystemExec scanner (scanner_bin_path, argp);
|
||||
PBD::ScopedConnectionList cons;
|
||||
// TODO timeout.., and honor user-terminate
|
||||
//scanner->Terminated.connect_same_thread (cons, boost::bind (&scanner_terminated))
|
||||
scanner.ReadStdout.connect_same_thread (cons, boost::bind (&parse_scanner_output, _1 ,_2));
|
||||
if (scanner.start (2 /* send stderr&stdout via signal */)) {
|
||||
PBD::error << "Cannot launch VST scanner app '" << scanner_bin_path << "': "<< strerror(errno) << endmsg;
|
||||
|
|
@ -751,11 +756,19 @@ vstfx_get_info (const char* dllpath, int type, enum VSTScanMode mode)
|
|||
while (scanner.is_running() && --timeout) {
|
||||
ARDOUR::GUIIdle();
|
||||
Glib::usleep (100000);
|
||||
if (ARDOUR::PluginManager::instance().cancelled()) break;
|
||||
|
||||
if (ARDOUR::PluginManager::instance().cancelled()) {
|
||||
// remove info file (might be incomplete)
|
||||
vstfx_remove_infofile(dllpath);
|
||||
// remove temporary blacklist file (scan incomplete)
|
||||
vstfx_un_blacklist(dllpath);
|
||||
scanner.terminate();
|
||||
return infos;
|
||||
}
|
||||
}
|
||||
scanner.terminate();
|
||||
}
|
||||
/* re-read index */
|
||||
/* re-read index (generated by external scanner) */
|
||||
vstfx_clear_info_list(infos);
|
||||
if (!vstfx_check_blacklist(dllpath)) {
|
||||
vstfx_get_info_from_file(dllpath, infos);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue