Chromium Code Reviews| Index: util/mac/service_management.h |
| diff --git a/util/mac/service_management.h b/util/mac/service_management.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e4429e8d1375a87b19fd2cf91030146f01954920 |
| --- /dev/null |
| +++ b/util/mac/service_management.h |
| @@ -0,0 +1,80 @@ |
| +// Copyright 2014 The Crashpad Authors. All rights reserved. |
| +// |
| +// Licensed under the Apache License, Version 2.0 (the "License"); |
| +// you may not use this file except in compliance with the License. |
| +// You may obtain a copy of the License at |
| +// |
| +// http://www.apache.org/licenses/LICENSE-2.0 |
| +// |
| +// Unless required by applicable law or agreed to in writing, software |
| +// distributed under the License is distributed on an "AS IS" BASIS, |
| +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| +// See the License for the specific language governing permissions and |
| +// limitations under the License. |
| + |
| +#ifndef CRASHPAD_UTIL_MAC_SERVICE_MANAGEMENT_H_ |
| +#define CRASHPAD_UTIL_MAC_SERVICE_MANAGEMENT_H_ |
| + |
| +#include <CoreFoundation/CoreFoundation.h> |
| +#include <unistd.h> |
| + |
| +#include <string> |
| + |
| +namespace crashpad { |
| + |
| +//! \brief Submits a job to the user launchd domain as in `SMJobSubmit()`. |
| +//! |
| +//! \param[in] job_cf A dictionary describing a job. |
| +//! |
| +//! \return `true` if the job was submitted successfully, otherwise `false`. |
| +//! |
| +//! \note This function is provided because `SMJobSubmit()` does not exist prior |
| +//! to Mac OS X 10.6, and behaves flakily on Mac OS X 10.10 DP2 14A261i in |
| +//! that it hangs 25% of the time (radar 17365104). |
| +bool ServiceManagementSubmitJob(CFDictionaryRef job_cf); |
| + |
| +//! \brief Removes a job from the user launchd domain as in `SMJobRemove()`. |
| +//! |
| +//! \param[in] label The label for the job to remove. |
| +//! \param[in] wait `true` if this function should block, waiting for the job to |
| +//! be removed. `false` if the job may be removed asynchronously. |
| +//! |
| +//! \return `true` if the job was removed successfully, otherwise `false`. |
|
Robert Sesek
2014/08/14 20:27:22
What does this return if the job is removed asynch
|
| +//! |
| +//! \note This function is provided because `SMJobRemove()` does not exist prior |
| +//! to Mac OS X 10.6, and when \a wait is true, blocks for far too long on |
| +//! Mac OS X 10.10 DP2 14A261i (radar 17365104; `_block_until_job_exits()` |
| +//! contains a one-second sleep() call). |
| +bool ServiceManagementRemoveJob(const std::string& label, bool wait); |
| + |
| +//! \brief Determines whether a specified job is loaded in the user launchd |
| +//! domain. |
| +//! |
| +//! \param[in] label The label for the job to look up. |
| +//! |
| +//! \return `true` if the job is loaded, otherwise `false`. |
| +//! |
| +//! \note A loaded job is not necessarily presently running, nor has it |
| +//! necessarily ever run in the past. |
| +//! \note This function is provided because `SMJobCopyDictionary()` does not |
| +//! exist prior to Mac OS X 10.6, and on Mac OS X 10.10 DP2 14a261i, it |
|
Robert Sesek
2014/08/14 20:27:22
What about in DP5?
|
| +//! fails to return a job dictionary immediately after a job is loaded |
| +//! (radar 17365104). |
| +bool ServiceManagementIsJobLoaded(const std::string& label); |
| + |
| +//! \brief Determines whether a specified job is running in the user launchd |
| +//! domain. |
| +//! |
| +//! \param[in] label The label for the job to look up. |
| +//! |
| +//! \return The job’s process ID if running, otherwise `0`. |
| +//! |
| +//! \note This function is provided because `SMJobCopyDictionary()` does not |
| +//! exist prior to Mac OS X 10.6, and on Mac OS X 10.10 DP2 14a261i, it |
| +//! fails to return a job dictionary immediately after a job is loaded |
| +//! (radar 17365104). |
| +pid_t ServiceManagementIsJobRunning(const std::string& label); |
| + |
| +} // namespace crashpad |
| + |
| +#endif // CRASHPAD_UTIL_MAC_SERVICE_MANAGEMENT |