result = dns_master_dumptostreamasync(
dctx->mctx, dctx->cache, NULL, style, dctx->fp,
named_g_mainloop, dumpdone, dctx, &dctx->mdctx);
- if (result == DNS_R_CONTINUE) {
+ if (result == ISC_R_SUCCESS) {
return;
}
if (result == ISC_R_NOTIMPLEMENTED) {
dns_db_currentversion(dctx->db, &dctx->version);
result = dns_master_dumptostreamasync(
dctx->mctx, dctx->db, dctx->version, style,
- dctx->fp, named_g_mainloop, dumpdone, dctx,
- &dctx->mdctx);
- if (result == DNS_R_CONTINUE) {
+ dctx->fp, dns_zone_getloop(dctx->zone->zone),
+ dumpdone, dctx, &dctx->mdctx);
+ if (result == ISC_R_SUCCESS) {
return;
}
if (result == ISC_R_NOTIMPLEMENTED) {
dns_dbversion_t *version;
dns_dbiterator_t *dbiter;
dns_totext_ctx_t tctx;
- isc_loop_t *loop;
dns_dumpdonefunc_t done;
void *done_arg;
/* dns_master_dumpasync() */
sorted[i] = &rdatasets[i];
}
n = i;
- INSIST(n <= MAXSORT);
qsort(sorted, n, sizeof(sorted[0]), dump_order_compare);
dns_db_closeversion(dctx->db, &dctx->version, false);
}
dns_db_detach(&dctx->db);
- if (dctx->loop != NULL) {
- isc_loop_detach(&dctx->loop);
- }
if (dctx->file != NULL) {
isc_mem_free(dctx->mctx, dctx->file);
}
dns_dumpctx_detach(&dctx);
}
-/*
- * This must be run from a loop manager thread.
- */
-static void
-setup_dump(void *arg) {
- dns_dumpctx_t *dctx = (dns_dumpctx_t *)arg;
-
- REQUIRE(DNS_DCTX_VALID(dctx));
-
- isc_work_enqueue(dctx->loop, master_dump_cb, master_dump_done_cb, dctx);
-}
-
static isc_result_t
dumpctx_create(isc_mem_t *mctx, dns_db_t *db, dns_dbversion_t *version,
const dns_master_style_t *style, FILE *f, dns_dumpctx_t **dctxp,
if (result != ISC_R_SUCCESS) {
return (result);
}
- isc_loop_attach(loop, &dctx->loop);
dctx->done = done;
dctx->done_arg = done_arg;
- isc_async_run(dctx->loop, setup_dump, dctx);
dns_dumpctx_attach(dctx, dctxp);
- return (DNS_R_CONTINUE);
+ isc_work_enqueue(loop, master_dump_cb, master_dump_done_cb, dctx);
+
+ return (ISC_R_SUCCESS);
}
isc_result_t
result = opentmp(mctx, format, filename, &tempname, &f);
if (result != ISC_R_SUCCESS) {
- goto cleanup;
+ goto cleanup_file;
}
result = dumpctx_create(mctx, db, version, style, f, &dctx, format,
header);
if (result != ISC_R_SUCCESS) {
- (void)isc_stdio_close(f);
- (void)isc_file_remove(tempname);
- goto cleanup;
+ goto cleanup_tempname;
}
- isc_loop_attach(loop, &dctx->loop);
dctx->done = done;
dctx->done_arg = done_arg;
dctx->file = file;
- file = NULL;
dctx->tmpfile = tempname;
- tempname = NULL;
- isc_async_run(dctx->loop, setup_dump, dctx);
dns_dumpctx_attach(dctx, dctxp);
- return (DNS_R_CONTINUE);
+ isc_work_enqueue(loop, master_dump_cb, master_dump_done_cb, dctx);
+
+ return (ISC_R_SUCCESS);
+
+cleanup_tempname:
+ (void)isc_stdio_close(f);
+ (void)isc_file_remove(tempname);
+ isc_mem_free(mctx, tempname);
+
+cleanup_file:
+ isc_mem_free(mctx, file);
-cleanup:
- if (dctx != NULL) {
- dns_dumpctx_detach(&dctx);
- }
- if (file != NULL) {
- isc_mem_free(mctx, file);
- }
- if (tempname != NULL) {
- isc_mem_free(mctx, tempname);
- }
return (result);
}