Exemple #1
0
bool
WorkerRunnable::Dispatch(JSContext* aCx)
{
  bool ok;

  if (!aCx) {
    ok = PreDispatch(nullptr, mWorkerPrivate);
    if (ok) {
      ok = DispatchInternal();
    }
    PostDispatch(nullptr, mWorkerPrivate, ok);
    return ok;
  }

  JSAutoRequest ar(aCx);

  JS::Rooted<JSObject*> global(aCx, JS::CurrentGlobalOrNull(aCx));

  Maybe<JSAutoCompartment> ac;
  if (global) {
    ac.emplace(aCx, global);
  }

  ok = PreDispatch(aCx, mWorkerPrivate);

  if (ok && !DispatchInternal()) {
    ok = false;
  }

  PostDispatch(aCx, mWorkerPrivate, ok);

  return ok;
}
bool
WorkerRunnable::Dispatch()
{
  bool ok = PreDispatch(mWorkerPrivate);
  if (ok) {
    ok = DispatchInternal();
  }
  PostDispatch(mWorkerPrivate, ok);
  return ok;
}
Exemple #3
0
EFI_STATUS
ResumeExecComd (
  VOID
  )
/*++

Routine Description:

  Resume SCT execution by executing "sct -c" in sct passive mode.

Arguments:

  None

Returns:

  EFI_SUCCESS - Operation succeeded.
  EFI_OUT_OF_RESOURCES - Memory allocation failed.
  Others      - Some failure happened.
  
--*/
{
  EFI_STATUS  Status;
  EFI_TIME    StartTime;
  EFI_TIME    EndTime;
  CHAR16      *Buffer;

  Buffer = EFI_SCT_CONTINUE_EXECUTION_NAME;
  //
  // PreDispatch: to get cmd and parameters
  //
  Status = PreDispatch (Buffer);
  if (EFI_ERROR (Status)) {
    (gEasFT->Cmd)->ComdResult = FAIL;
    EFI_ENTS_DEBUG ((EFI_ENTS_D_ERROR, L"Error in ResumeExecComd: PreDispatch error - %r", Status));
    Status = PostDispatch ();
    if (EFI_ERROR (Status)) {
      EFI_ENTS_DEBUG ((EFI_ENTS_D_ERROR, L"Error in ResumeExecComd: PostDispatch status - %r\n", Status));
    }

    return Status;
  }
  //
  // Resume SCT execution by executing "sct -c" in sct passive mode.
  //
  RT->GetTime (&StartTime, NULL);
  Status = ShellExecute (mImageHandle, (gEasFT->Cmd)->ComdArg, FALSE);
  RT->GetTime (&EndTime, NULL);
  EFI_ENTS_DEBUG ((EFI_ENTS_D_TRACE, L"dispatch:(%s)", (gEasFT->Cmd)->ComdArg));
  Print (L"dispatch:(%s) - %r\n", (gEasFT->Cmd)->ComdArg, Status);
  if (Status == EFI_OUT_OF_RESOURCES) {
    return EFI_OUT_OF_RESOURCES;
  }

  Status = RecordMessage (
            &((gEasFT->Cmd)->ComdRuntimeInfo),
            &(gEasFT->Cmd)->ComdRuntimeInfoSize,
            L"TEST_EXEC (%s) Status - %r",
            (gEasFT->Cmd)->ComdArg,
            Status
            );
  if (Status == EFI_OUT_OF_RESOURCES) {
    return EFI_OUT_OF_RESOURCES;
  }

  Status = RecordMessage (
            &((gEasFT->Cmd)->ComdOutput),
            &(gEasFT->Cmd)->ComdOutputSize,
            L"StartTime - %02d-%02d-%04d %02d:%02d:%02d, EndTime - %02d-%02d-%04d %02d:%02d:%02d",
            StartTime.Day,
            StartTime.Month,
            StartTime.Year,
            StartTime.Hour,
            StartTime.Minute,
            StartTime.Second,
            EndTime.Day,
            EndTime.Month,
            EndTime.Year,
            EndTime.Hour,
            EndTime.Minute,
            EndTime.Second
            );
  if (Status == EFI_OUT_OF_RESOURCES) {
    return EFI_OUT_OF_RESOURCES;
  }
  //
  // For remote SCT execution, the potential reset during the execution will cause no ACK generation, so
  // after "sct -c" execution finish, corresponding ACK needs to be sent to inform remote EMS side application.
  //
  Status = PostDispatch ();
  if (EFI_ERROR (Status)) {
    EFI_ENTS_DEBUG ((EFI_ENTS_D_ERROR, L"Error in ResumeExecComd: PostDispatch status - %r\n", Status));
  }

  return Status;
}