コード例 #1
0
ファイル: traceanc.c プロジェクト: bhanug/mps
void TracePostStartMessage(Trace trace)
{
  Arena arena;
  TraceId ti;
  TraceStartMessage tsMessage;

  AVERT(Trace, trace);
  AVER(trace->state == TraceUNFLIPPED);

  arena = trace->arena;
  AVERT(Arena, arena);

  ti = trace->ti;
  AVERT(TraceId, ti);

  tsMessage = arena->tsMessage[ti];
  if(tsMessage) {
    AVERT(TraceStartMessage, tsMessage);

    traceStartWhyToTextBuffer(tsMessage->why,
                              sizeof tsMessage->why, trace->why);

    arena->tsMessage[ti] = NULL;
    MessagePost(arena, TraceStartMessageMessage(tsMessage));
  } else {
    arena->droppedMessages += 1;
  }

  /* We have consumed the pre-allocated message */
  AVER(!arena->tsMessage[ti]);
}
コード例 #2
0
ファイル: traceanc.c プロジェクト: bhanug/mps
void TracePostMessage(Trace trace)
{
  Arena arena;
  TraceId ti;
  TraceMessage tMessage;

  AVERT(Trace, trace);
  AVER(trace->state == TraceFINISHED);
  
  arena = trace->arena;
  AVERT(Arena, arena);

  ti = trace->ti;
  AVERT(TraceId, ti);

  tMessage = arena->tMessage[ti];
  if(tMessage) {
    AVERT(TraceMessage, tMessage);

    tMessage->liveSize = trace->forwardedSize + trace->preservedInPlaceSize;
    tMessage->condemnedSize = trace->condemned;
    tMessage->notCondemnedSize = trace->notCondemned;

    arena->tMessage[ti] = NULL;
    MessagePost(arena, TraceMessageMessage(tMessage));
  } else {
    arena->droppedMessages += 1;
  }
  
  /* We have consumed the pre-allocated message */
  AVER(!arena->tMessage[ti]);
}
コード例 #3
0
void* InterfaceMainLoop(void* arg)
{
   char *line = (char*) malloc(200);
   size_t size;
   //char buf[200];

   while (strcmp(line,"quit") != 0)
   {
      printf("blakadm> ");
      if (getline(&line, &size, stdin) != -1)
      {
      
         EnterServerLock();

         // TODO: in windows this uses a set char array of size 200, no bounds checking
         // is being done here yet
         //TryAdminCommand(console_session_id,buf);
         TryAdminCommand(console_session_id,line);

         LeaveServerLock();

      }
   }

   free(line);
   MessagePost(main_thread_id,WM_QUIT,0,0);
}
コード例 #4
0
ファイル: cuiselectbutton.cpp プロジェクト: dogtwelve/eepp
void cUISelectButton::Select() {
	bool wasSelected = Selected();

	SetSkinState( cUISkinState::StateSelected );

	mControlFlags |= UI_CTRL_FLAG_SELECTED;

	if ( !wasSelected ) {
		cUIMessage tMsg( this, cUIMessage::MsgSelected, 0 );
		MessagePost( &tMsg );
	}
}
コード例 #5
0
ファイル: timer.c プロジェクト: MorbusM59/Meridian59
// Adds a timer to the heap, using timer_node data. Passed
// timer_node is first unused element in timer_heap array.
__forceinline void TimerAddNode(timer_node *t)
{
   if (numActiveTimers == 0 || timer_heap[0]->time > t->time)
   {
      // We're making a new first-timer, so the time main loop should wait might
      // have changed, so have it break out of loop and recalibrate
      MessagePost(main_thread_id, WM_BLAK_MAIN_RECALIBRATE, 0, 0);
   }

   // Start node off at end of heap.
   int i = numActiveTimers++;
   timer_heap[i]->heap_index = i;

   // Push node up if necessary.
   while (i > 0 && timer_heap[i]->time < timer_heap[PARENT(i)]->time)
   {
      TimerSwapIndex(i, PARENT(i));
      i = PARENT(i);
   }
}