function background_process_service_execute in Background Process 6
Same name and namespace in other branches
- 8 background_process.module \background_process_service_execute()
- 7 background_process.module \background_process_service_execute()
Execute the service
Parameters
$handle: Handle of process
$return: Whether or not the function should return or exit.
2 calls to background_process_service_execute()
- background_process_service_start in ./
background_process.module - Call the function requested by the service call
- _background_process_queue in ./
background_process.module - Worker callback for processing queued function call
File
- ./
background_process.module, line 532
Code
function background_process_service_execute($handle, $return = FALSE) {
// @todo Add static caching? We've already loaded this previously in the access handler
$process = background_process_get_process($handle);
if (!$process) {
watchdog('bg_process', 'Process not found for handle: %handle', array(
'%handle' => $handle,
), WATCHDOG_ERROR);
if ($return) {
return;
}
else {
exit;
}
}
$process->start_stamp = microtime(TRUE);
db_query("UPDATE {background_process} SET start_stamp = '%s', exec_status = %d WHERE handle = '%s' AND exec_status IN (%d, %d)", sprintf("%.06f", $process->start_stamp), BACKGROUND_PROCESS_STATUS_RUNNING, $handle, BACKGROUND_PROCESS_STATUS_LOCKED, BACKGROUND_PROCESS_STATUS_QUEUED);
$claimed = db_affected_rows();
if ($claimed) {
$process->exec_status = BACKGROUND_PROCESS_STATUS_RUNNING;
$process = BackgroundProcess::load($process);
background_process_current_handle($handle);
}
else {
if ($return) {
return;
}
else {
exit;
}
}
// Make sure the process is removed when we're done
if (!$return) {
register_shutdown_function('background_process_remove_process', $process->handle, $process->start_stamp);
}
if (is_callable($process->callback)) {
try {
if (!$return) {
register_shutdown_function('module_invoke_all', 'background_process_shutdown', $process);
}
$callback = _background_process_callback_name($process->callback);
progress_initialize_progress($handle, "Background process '{$callback}' initialized");
call_user_func_array($process->callback, $process->args);
progress_end_progress($handle, "Background process '{$callback}' finished");
if ($return) {
background_process_remove_process($process->handle, $process->start_stamp);
module_invoke_all('background_process_shutdown', $process);
}
} catch (Exception $e) {
// Exception occurred, inform shutdown handlers.
if (!$return) {
module_invoke_all('background_process_shutdown', $process, (string) $e);
}
throw $e;
}
}
else {
// Function not found
watchdog('bg_process', 'Callback: %callback not found', array(
'%callback' => $process->callback,
), WATCHDOG_ERROR);
}
if ($return) {
return;
}
else {
exit;
}
}