Example #1
0
rc_t vol_t::mark_failed(bool /*evict*/, bool redo)
{
    spinlock_write_critical_section cs(&_mutex);

    if (_failed) { return RCOK; }

    bool useBackup = _backups.size() > 0;

    /*
     * The order of operations in this method is crucial. We may only set
     * failed after the restore manager is created, otherwise read/write
     * operations will find a null restore manager and thus will not be able to
     * wait for restore. Generating a failure LSN must occur after we've set
     * the failed flag, because we must guarantee that no read or write
     * occurred after the failure LSN (restore_begin log record).  Finally, the
     * restore manager may only be forked once the failure LSN has been set,
     * lsn_t::null, which is why we cannot pass the failureLSN in the
     * constructor.
     */

    // open backup file -- may already be open due to new backup being taken
    if (useBackup && _backup_fd < 0) {
        W_DO(open_backup());
    }

    if (!ss_m::logArchiver) {
        throw runtime_error("Cannot simulate restore with mark_failed \
                without a running log archiver");
    }
Example #2
0
int main(int argc, char **argv) {
	char buf[1024], *usage =
"usage: deepstripper-gtk [-d[ebug]] [-h[elp]] [-o[utput] <path>]\n"
"       [-dps12|-dps16 <path>] [-e[xtract] <project>]\n";
	GtkWidget *vbox, *men, *paned, *note, *frame, *scroll;
	GtkItemFactory *fac;
	GtkAccelGroup *acc;
	int i, dps = -1;

	for (i=1; i<argc; i++) {
		if (strcmp(argv[i], "-d")==0) {
			g_dbg = g_dbg<<1 | 1;
		} else if (strncmp(argv[i], "-h", 2)==0) {
			g_print("%s", usage);
			return 0;
		}
	}
	gtk_init(&argc, &argv);
	g_main = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_default_size(GTK_WINDOW(g_main), 600, 400);
	set_title("?", GETCWD(buf, sizeof(buf)), "");
	g_signal_connect(G_OBJECT(g_main), "delete_event", G_CALLBACK(quit), NULL);

	vbox = gtk_vbox_new(FALSE, 0);
	gtk_container_add(GTK_CONTAINER(g_main), vbox);
	gtk_widget_show(vbox);

	acc = gtk_accel_group_new();
	fac = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<deepstripper-main>", acc);
	gtk_item_factory_create_items(fac, MENU_SIZE, root_menu, 0);
	men = gtk_item_factory_get_widget(fac, "<deepstripper-main>");
	gtk_box_pack_start(GTK_BOX(vbox), men, FALSE, FALSE, 0);
	gtk_window_add_accel_group(GTK_WINDOW(g_main), acc);
	gtk_widget_show(men);
	g_multi = gtk_item_factory_get_item(fac, "/Multi");

	paned = gtk_hpaned_new();
	gtk_container_set_border_width(GTK_CONTAINER(paned), 5);
	gtk_box_pack_start(GTK_BOX(vbox), paned, TRUE, TRUE, 0);
	gtk_widget_show(paned);

	note = gtk_notebook_new();
	gtk_notebook_set_tab_pos(GTK_NOTEBOOK(note), GTK_POS_BOTTOM);
	gtk_notebook_set_show_border(GTK_NOTEBOOK(note), TRUE);
	gtk_notebook_set_homogeneous_tabs(GTK_NOTEBOOK(note), TRUE);
	gtk_widget_set_size_request(note, 150, 200);
	gtk_paned_pack1(GTK_PANED(paned), note, TRUE, FALSE);
	gtk_widget_show(note);

	for (i=0; i<N_TABS; i++) {
		GtkWidget *l = gtk_label_new(g_tabs[i].tab);
		gtk_widget_show(l);
		gtk_notebook_append_page(GTK_NOTEBOOK(note),
			make_list(g_tabs[i].data, i), l);
	}

	frame = gtk_frame_new("Item properties:");
	gtk_widget_set_size_request(frame, 150, 200);
	gtk_paned_pack2(GTK_PANED(paned), frame, TRUE, FALSE);
	gtk_widget_show(frame);

	scroll = gtk_scrolled_window_new(NULL, NULL);
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
		GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
	gtk_container_add(GTK_CONTAINER(frame), scroll);
	gtk_widget_show(scroll);
	
	g_info = gtk_label_new(DEFAULT_INFO);
	gtk_label_set_justify(GTK_LABEL(g_info), GTK_JUSTIFY_LEFT);
	gtk_label_set_line_wrap(GTK_LABEL(g_info), FALSE);
	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), g_info);
	gtk_widget_show(g_info);

	g_stat = gtk_statusbar_new();
	gtk_box_pack_end(GTK_BOX(vbox), g_stat, FALSE, FALSE, 0);
	gtk_widget_show(g_stat);
	set_status("status");
	
// Display everything
	gtk_widget_show(g_main);

// Process all other command line switches
	for (i=1; i<argc; i++) {
		if (strncmp(argv[i], "-o", 2)==0) {
			if (chdir(argv[++i]))
				about_box("unable to change directory");
			else
				set_title(NULL, GETCWD(buf, sizeof(buf)), NULL);
		} else if (strncmp(argv[i], "-dps", 4)==0) {
			open_backup(argv[i], argv[i+1]);
			if (strcmp(argv[i], "-dps12")==0)
				dps = AOSP_DPS12;
			else
				dps = AOSP_DPS16;
			++i;
		} else if (strncmp(argv[i], "-e", 2)==0) {
			if (dps<0)
				about_box("No backup specified to extract from");
			else {
				open_project(dps, akaiosdisk_project_byname(&g_disk, argv[++i]));
				select_tracks(MID_SELNOE);
				extract_tracks();
			}
		} else if (strncmp(argv[i], "-d", 2)==0 ||
			strncmp(argv[i], "-h", 2)==0) {
			; // Skip earlier opts
		} else {
			about_box(usage);
		}
	}

// Run message pump..
	gtk_main();
	return 0;
}
Example #3
0
// Menu handler
static void menu(gpointer d, guint action, GtkWidget *w) {
	char *name;

	switch(action) {
	case MID_OPEN12:
		_DBG(_DBG_GUI,"open DPS12\n");
		name = get_file("Open DPS12 backup", FALSE);
		if (name)
			open_backup("-dps12", name);
		break;
	case MID_OPEN16:
		_DBG(_DBG_GUI,"open DPS16\n");
		name = get_file("Open DPS16 backup", FALSE);
		if (name)
			open_backup("-dps16", name);
		break;
	case MID_CLOSE:
		_DBG(_DBG_GUI,"close\n");
		close_backup();
		break;
	case MID_PROPS:
		_DBG(_DBG_GUI,"properties\n");
		show_project_info();
		break;
	case MID_EXIT:
		quit(w, NULL, d);
		break;

	case MID_SELASS:
		_DBG(_DBG_GUI,"select assigned\n");
		select_tracks(action);
		break;
	case MID_SELNOE:
		_DBG(_DBG_GUI,"select non-empty\n");
		select_tracks(action);
		break;
	case MID_SELALL:
		_DBG(_DBG_GUI,"select all\n");
		select_tracks(action);
		break;
	case MID_SELNONE:
		_DBG(_DBG_GUI,"select none\n");
		select_tracks(action);
		break;
	case MID_SELEXP:
		_DBG(_DBG_GUI,"export selected\n");
		if (g_proj.splbyte==2)
			extract_tracks();
		else
			about_box("FIXME: only 16-bit data can be exported");
		break;

	case MID_HELP:
		_DBG(_DBG_GUI,"help about\n");
		about_box(NULL);
		break;
	case MID_VERSION:
		_DBG(_DBG_GUI,"help versions\n");
		{
			char buf[256];
			sprintf(buf, "deepstripper-gtk: %s\ngtk-build: %d.%d.%d\ngtk-runtime: %d.%d.%d",
				RELEASE, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION,
				gtk_major_version, gtk_minor_version, gtk_micro_version);
			about_box(buf);
		}
		break;

	case MID_MULTI:
		_DBG(_DBG_GUI,"change project: %s\n", ((AkaiOsDisk_Dirent *)d)->name);
		open_project(g_dps, (AkaiOsDisk_Dirent *)d);
		break;

	default:
		_DBG(_DBG_GUI,"unknown action: %d\n", action);
		break;
	}
}