Просмотр исходного кода

don't crash when select() on master fails synchronously

svars->drv[S] would not be initialized yet, so cancel_sync() would
crash.
Oswald Buddenhagen 13 лет назад
Родитель
Сommit
343f16771a
1 измененных файлов с 4 добавлено и 0 удалено
  1. 4 0
      src/sync.c

+ 4 - 0
src/sync.c

@@ -611,6 +611,10 @@ sync_boxes( store_t *ctx[], const char *names[], channel_conf_t *chan,
 		ctx[t]->uidvalidity = -1;
 		set_bad_callback( ctx[t], store_bad, AUX );
 		svars->drv[t] = ctx[t]->conf->driver;
+	}
+	/* Both boxes must be fully set up at this point, so that error exit paths
+	 * don't run into uninitialized variables. */
+	for (t = 0; t < 2; t++) {
 		info( "Selecting %s %s...\n", str_ms[t], ctx[t]->name );
 		DRIVER_CALL(select( ctx[t], (chan->ops[t] & OP_CREATE) != 0, box_selected, AUX ));
 	}