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