コード例 #1
0
    bool pin() {
      // Can't pin young objects!
      if(young_object_p()) return false;

      flags().Pinned = 1;
      return true;
    }
コード例 #2
0
ファイル: oop.cpp プロジェクト: johnmcconnell/rubinius
  bool ObjectHeader::pin() {
    // Can't pin young objects!
    if(young_object_p()) return false;

    for(;;) {
      HeaderWord orig    = header;
      HeaderWord new_val = orig;
      new_val.f.Pinned   = 1;

      if(header.atomic_set(orig, new_val)) return true;
    }
    return true;
  }
コード例 #3
0
  bool ObjectHeader::pin() {
    // Can't pin young objects!
    if(young_object_p()) return false;

    for(;;) {
      if(inflated_header_p()) {
        return inflated_header()->pin();
      } else {
        HeaderWord orig    = header;
        orig.f.inflated    = 0;
        HeaderWord new_val = orig;
        new_val.f.Pinned   = 1;

        if(header.atomic_set(orig, new_val)) return true;
      }
    }
    return true;
  }