357 {
359 ShareEventHeader* evtH =
static_cast<ShareEventHeader*
>(
m_status->get_address());
360 if (evtH->evtProcessStatus != ShareEventHeader::CLEARED) {
362 return(StatusCode::RECOVERABLE);
363 }
364 *tokenString = evtH->token;
365 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
366 return(StatusCode::SUCCESS);
367 }
368
369 for (
int i = 1;
i <=
m_num;
i++) {
370 void*
status =
static_cast<char*
>(
m_status->get_address()) +
i *
sizeof(ShareEventHeader);
371 ShareEventHeader* evtH =
static_cast<ShareEventHeader*
>(
status);
372 ShareEventHeader::ProcessStatus evtStatus = evtH->evtProcessStatus;
373 if (evtStatus == ShareEventHeader::FILLED) {
374 ATH_MSG_DEBUG(
"Waiting for UNFILL clearObject, client = " << i);
375 return(StatusCode::RECOVERABLE);
376 } else if (i == num && evtStatus != ShareEventHeader::LOCKED) {
377 ATH_MSG_DEBUG(
"Waiting for LOCK clearObject, client = " << i);
378 return(StatusCode::RECOVERABLE);
379 }
381 if ((i == num || num < 0) && evtStatus == ShareEventHeader::LOCKED) {
382 *tokenString = evtH->token;
384 ATH_MSG_DEBUG(
"Setting LOCK clearObject, for client = " << num <<
": " << evtH->token);
386
387 }
388 }
389 }
390
391 if (num > 0 && *tokenString != nullptr) {
393 void*
status =
static_cast<char*
>(
m_status->get_address()) +
num *
sizeof(ShareEventHeader);
394 ShareEventHeader* evtH =
static_cast<ShareEventHeader*
>(
status);
395 if (strncmp(*tokenString, "wait", 4) == 0) {
396 ATH_MSG_INFO(
"Server clearObject() got wait, client = " << num);
397 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
400 return(StatusCode::SUCCESS);
401 }
402 if (strncmp(*tokenString, "release", 7) == 0) {
403 ATH_MSG_INFO(
"Server clearObject() got release, client = " << num);
404 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
406 return(StatusCode::SUCCESS);
407 }
408 if (strncmp(*tokenString, "start", 5) == 0) {
409 ATH_MSG_INFO(
"Server clearObject() got start, client = " << num <<
", of " <<
m_num - 1);
412 }
414 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
416 return(StatusCode::SUCCESS);
417 }
418 if (strncmp(*tokenString, "stop", 4) == 0) {
419 ATH_MSG_INFO(
"Server clearObject() got stop, client = " << num);
421 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
424 if (num ==
m_num - 1) {
425 return(StatusCode::SUCCESS);
426 }
427 return(StatusCode::FAILURE);
428 }
430 return(StatusCode::SUCCESS);
431 }
432 evtH->evtSize = 0;
433 m_status->flush(0,
sizeof(ShareEventHeader));
434 evtH->evtProcessStatus = ShareEventHeader::CLEARED;
435 return(StatusCode::SUCCESS);
436 }
437 return(StatusCode::RECOVERABLE);
438}