From f71be99bd913f8cc8aab59b97f656dec32f06837 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 20 Apr 2013 13:26:34 +0200 Subject: [PATCH] BRequest: Add Process() The method creates the initial jobs for the request and processes the jobs from the job queue until empty or an error occurs. --- headers/os/package/Request.h | 2 ++ src/kits/package/Request.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/headers/os/package/Request.h b/headers/os/package/Request.h index 57ae1af807..5414201366 100644 --- a/headers/os/package/Request.h +++ b/headers/os/package/Request.h @@ -32,6 +32,8 @@ public: BJob* PopRunnableJob(); + status_t Process(bool failIfCanceledOnly = false); + protected: status_t QueueJob(BJob* job); diff --git a/src/kits/package/Request.cpp b/src/kits/package/Request.cpp index 7005c5e325..35c4058eeb 100644 --- a/src/kits/package/Request.cpp +++ b/src/kits/package/Request.cpp @@ -49,6 +49,30 @@ BRequest::PopRunnableJob() } +status_t +BRequest::Process(bool failIfCanceledOnly) +{ + status_t error = InitCheck(); + if (error != B_OK) + return error; + + error = CreateInitialJobs(); + if (error != B_OK) + return error; + + while (BJob* job = PopRunnableJob()) { + error = job->Run(); + delete job; + if (error != B_OK) { + if (!failIfCanceledOnly || error == B_CANCELED) + return error; + } + } + + return B_OK; +} + + status_t BRequest::QueueJob(BJob* job) {