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