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)
{
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;
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);