Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам

>
>
>
Примеры ошибок, обнаруженных с помощью …

Примеры ошибок, обнаруженных с помощью диагностики V612

V612. Unconditional 'break/continue/return/goto' within a loop.


PCSX2

V612 An unconditional 'break' within a loop. pcsx2 cdvdiso.cpp 218


int DvdRead(u32 lsn, u32 sectors, void *buf,
            CdRMode *mode)
{
  u32 i;
  u8* buff;

  for (i=lsn; i<(lsn+sectors); i++)
  {
    if (CDVDreadTrack(i, CDVD_MODE_2048)==-1)
      return 0;
    buff = CDVDgetBuffer();
    if (buff==NULL) return 0;
//    switch (mode->datapattern){
//      case CdSecS2064:
      ((u32*)buf)[0] = i + 0x30000;
      memcpy_fast((u8*)buf+12, buff, 2048);
      buf = (char*)buf + 2064; break;           // <=
//    default:
//      return 0;
//    }
  }
  return 1;
}

Trans-Proteomic Pipeline

V612 An unconditional 'return' within a loop. tpplib residuemass.cxx 1442


const char* ResidueMass::getStdModResidues(....) {
  ....
  for (rmap::const_iterator i = p.first; i != p.second; ++i) {
    const cResidue &r = (*i).second;
    if (r.m_masses[0].m_nterm) {
      n_term_aa_mod = true;
    } else if (r.m_masses[0].m_cterm) {
      c_term_aa_mod = true;
    }
    return r.m_residue.c_str();            // <=
  }
  ....
}

LLVM/Clang

V612 An unconditional 'break' within a loop. objcarc.cpp 2763


bool
ObjCARCOpt::VisitBottomUp(....) {
  ....
  for (BBState::edge_iterator SI(MyStates.succ_begin()),
       SE(MyStates.succ_end()); SI != SE; ++SI)
  {
    const BasicBlock *Succ = *SI;
    DenseMap<const BasicBlock *, BBState>::iterator I =
      BBStates.find(Succ);
    assert(I != BBStates.end());
    MyStates.InitFromSucc(I->second);
    ++SI;
    for (; SI != SE; ++SI) {
      Succ = *SI;
      I = BBStates.find(Succ);
      assert(I != BBStates.end());
      MyStates.MergeSucc(I->second);
    }
    break;                             // <=
  }
  ....
}

Similar errors can be found in some other places:

  • V612 An unconditional 'break' within a loop. objcarc.cpp 2948
  • V612 An unconditional 'break' within a loop. undefinedassignmentchecker.cpp 75
  • V612 An unconditional 'break' within a loop. bugreporter.cpp 1095

D programming language

V612 An unconditional 'return' within a loop. cgxmm.c 825


code *cdvector(elem *e, regm_t *pretregs)
{
  ....
  code *c = CNIL;
  for (int i = 0; i < n; i++)
  {
    c = cat(c, codelem(params[i], pretregs, FALSE));
    *pretregs = 0;      // in case they got set
    return c;
  }
  ....
}

OpenCV

V612 An unconditional 'break' within a loop. blobtrackingmsfg.cpp 600


virtual CvBlob* Process(....)
{
  ....
  while(!m_Collision && m_FGWeight>0)
  {
    ....
    break;
  }
  ....
}

ReactOS

V612 An unconditional 'break' within a loop. pin.c 1839


VOID NTAPI IKsPin_PinCentricWorker(IN PVOID Parameter)
{
  ....
  do
  {
    DPRINT("IKsPin_PinCentricWorker calling "
           "Pin Process Routine\n");
    Status =
      This->Pin.Descriptor->Dispatch->Process(&This->Pin);
    DPRINT("IKsPin_PinCentricWorker Status %lx, "
           "Offset %lu Length %lu\n", Status,
           This->LeadingEdgeStreamPointer.Offset,
           This->LeadingEdgeStreamPointer.Length);
    break;
  } while(This->IrpCount);
}

Similar errors can be found in some other places:

  • V612 An unconditional 'break' within a loop. regexp.c 3633
  • V612 An unconditional 'break' within a loop. hlpfile.c 1131

Windows 8 Driver Samples

V612 An unconditional 'break' within a loop. ap_assocmgr.c 1817


NDIS_STATUS
AmSetApBeaconMode(....)
{
  ....
  while (BeaconEnabled != AssocMgr->BeaconEnabled)
  {
    ndisStatus = ....;
    if (NDIS_STATUS_SUCCESS != ndisStatus)
    {
      break;
    }
    AssocMgr->BeaconEnabled = BeaconEnabled;
    break;
  }
  ....
}

NetXMS

V612 An unconditional 'break' within a loop. tools.cpp 280


static bool MatchStringEngine(....)
{
  ....
  // Handle "*?" case
  while(*MPtr == _T('?'))
  {
    if (*SPtr != 0)
      SPtr++;
    else
      return false;
    MPtr++;
    break;
  }
  ....
}

Chromium

V612 An unconditional 'return' within a loop. picture_layer_impl.cc 638


ResourceProvider::ResourceId
PictureLayerImpl::ContentsResourceId() const
{
  ....
  for (PictureLayerTilingSet::CoverageIterator iter(....);
       iter;
       ++iter)
  {
    if (!*iter)
      return 0;

    const ManagedTileState::TileVersion& tile_version = ....;

    if (....)
      return 0;

    if (iter.geometry_rect() != content_rect)
      return 0;

    return tile_version.get_resource_id();
  }
  return 0;
}

Chromium

V612 An unconditional 'break' within a loop. action_info.cc 76


scoped_ptr<ActionInfo> ActionInfo::Load(....)
{
  ....
  for (base::ListValue::const_iterator iter = icons->begin();
        iter != icons->end(); ++iter)
  {
    std::string path;
    if (....);
      return scoped_ptr<ActionInfo>();
    }

    result->default_icon.Add(....);
    break;
  }
  ....
}

Chromium

V612 An unconditional 'return' within a loop. bluetooth_device_win.cc 224


const BluetoothServiceRecord*
BluetoothDeviceWin::GetServiceRecord(
  const std::string& uuid) const
{
  for (ServiceRecordList::const_iterator iter =
         service_record_list_.begin();
       iter != service_record_list_.end();
       ++iter) {
    return *iter;
  }
  return NULL;
}

Trans-Proteomic Pipeline

V612 An unconditional 'return' within a loop. residuemass.cxx 1442


const char* ResidueMass::getStdModResidues(....) {
  ....
  for (rmap::const_iterator i = p.first; i != p.second; ++i) {
    const cResidue &r = (*i).second;
    if (r.m_masses[0].m_nterm) {
        n_term_aa_mod = true;
    } else if (r.m_masses[0].m_cterm) {
        c_term_aa_mod = true;
    }
    return r.m_residue.c_str();
  }

  if(! strcmp(mod, "+N-formyl-met (Protein)")) {
    return "n";
  } if (! strcmp(mod, "13C6-15N2 (K)")) {
    return "K";
  } if (! strcmp(mod, "13C6-15N4 (R)")) {
    return "R";
  ....
}

Prime95

V612 An unconditional 'break' within a loop. prime95 comm95b.c 133


void registerThreadTermination (void)
{
  ....
  for (i = 0; i < NUM_THREAD_HANDLES; i++) {
    if (THREAD_HANDLES[i] != h) break;
    THREAD_HANDLES[i] = THREAD_HANDLES[--NUM_THREAD_HANDLES];
    break;
  }
}

Geant4 software

V612 An unconditional 'break' within a loop. g4qmdgroundstatenucleus.cc 274


void G4QMDGroundStateNucleus::packNucleons()
{
  ....
  while ( nmTry < maxTrial )
  {
    nmTry++;
    G4int i = 0;
    for ( i = 1 ; i < GetMassNumber() ; i++ )
    {
      ....
    }
    if ( i == GetMassNumber() )
    {
      areTheseMsOK = true;
    }
    break;
  }
  ....
}

gperftools

V612 An unconditional 'return' within a loop. symbolize.cc 154


int SymbolTable::Symbolize() {
  ....
  if (socketpair(AF_UNIX, SOCK_STREAM, 0, child_fds[i]) == -1) {
    for (int j = 0; j < i; j++) {
      close(child_fds[j][0]);
      close(child_fds[j][1]);
      PrintError("Cannot create a socket pair");
      return 0;
    }
  }
  ....
}

Chromium

V612 An unconditional 'return' within a loop. objects.cc 10326


Code* Code::FindFirstCode() {
  ASSERT(is_inline_cache_stub());
  DisallowHeapAllocation no_allocation;
  int mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET);
  for (RelocIterator it(this, mask); !it.done(); it.next())
  {
    RelocInfo* info = it.rinfo();
    return
      Code::GetCodeFromTargetAddress(info->target_address());
  }
  return NULL;
}

Firebird

V612 An unconditional 'break' within a loop. lock.cpp 965


SLONG LockManager::queryData(....)
{
  ....
  for (const srq* lock_srq =
         (SRQ) SRQ_ABS_PTR(data_header.srq_backward);
     lock_srq != &data_header;
     lock_srq = (SRQ) SRQ_ABS_PTR(lock_srq->srq_backward))
  {
    const lbl* const lock = ....;
    CHECK(lock->lbl_series == series);
    data = lock->lbl_data;
    break;
  }
  ....
}

Similar errors can be found in some other places:

  • V612 An unconditional 'break' within a loop. pag.cpp 217

CryEngine 3 SDK

V612 An unconditional 'break' within a loop. weapon.cpp 2854


void CWeapon::AccessoriesChanged(bool initialLoadoutSetup)
{
  ....
  for (int i = 0; i < numZoommodes; i++)
  {
    CIronSight* pZoomMode = ....
    const SZoomModeParams* pCurrentParams = ....
    const SZoomModeParams* pNewParams = ....
    if(pNewParams != pCurrentParams)
    {
      pZoomMode->ResetSharedParams(pNewParams);
    }
    break;
  }
  ....
}

Similar errors can be found in some other places:

  • V612 An unconditional 'break' within a loop. gunturret.cpp 1647
  • V612 An unconditional 'break' within a loop. vehiclemovementbase.cpp 2362
  • V612 An unconditional 'break' within a loop. vehiclemovementbase.cpp 2382

V8 JavaScript Engine

V612 An unconditional 'return' within a loop. objects.cc 7301


Map* Next() {
  ....
  while (index < number_of_transitions) {
    *TransitionArrayHeader() = Smi::FromInt(index + 1);
    return transition_array_->GetTarget(index);
  }
  ....
}

Data Distribution Service

V612 An unconditional 'return' within a loop. socket.cpp 187


void Socket_Impl::
  send_ (void const* buf, size_t s)
{
  ....
  while (queue_.is_empty ())
  {
    if (timeout)
    {
      if (cond_.wait (&abs_time) != -1)
        break;
    }
    else
    {
      if (cond_.wait () != -1)
        break;
    }

    return -1; // errno is already set
  }
  ....
}

Similar errors can be found in some other places:

  • V612 An unconditional 'return' within a loop. socket.cpp 254

Scilab

V612 An unconditional 'break' within a loop. msgs.c 1293


static int msg_101(int *n, int *ierr)
{
  ....
  for (i=0;i<(int)strlen(line);i++)
  {
    if (line[i]==' ') line[i]='\0';
    break;
  }
  ....
}

Similar errors can be found in some other places:

  • V612 An unconditional 'break' within a loop. msgs.c 1313
  • V612 An unconditional 'break' within a loop. api_common.cpp 1407

Qt

V612 An unconditional 'break' within a loop. qhelpgenerator.cpp 429


bool QHelpGenerator::registerVirtualFolder(....)
{
  ....
  while (d->query->next()) {
    d->namespaceId = d->query->value(0).toInt();
    break;
  }
  ....
}

Similar errors can be found in some other places:

  • V612 An unconditional 'break' within a loop. qhelpgenerator.cpp 642

Bitcoin

V612 An unconditional 'return' within a loop. crypter.cpp 169


bool CCryptoKeyStore::Unlock(const CKeyingMaterial& vMasterKeyIn)
{
  {
    LOCK(cs_KeyStore);
    if (!SetCrypted())
      return false;

    CryptedKeyMap::const_iterator mi = mapCryptedKeys.begin();
    for (; mi != mapCryptedKeys.end(); ++mi)
    {
      const CPubKey &vchPubKey = (*mi).second.first;
      const std::vector<unsigned char> &vchCryptedSecret =
        (*mi).second.second;
      CKeyingMaterial vchSecret;
      if(!DecryptSecret(vMasterKeyIn, vchCryptedSecret,
                        vchPubKey.GetHash(), vchSecret))
          return false;
      if (vchSecret.size() != 32)
          return false;
      CKey key;
      key.Set(vchSecret.begin(), vchSecret.end(),
              vchPubKey.IsCompressed());
      if (key.GetPubKey() == vchPubKey)
          break;
      return false;
    }
    vMasterKey = vMasterKeyIn;
  }
  NotifyStatusChanged(this);
  return true;
}

K Desktop Environment

V612 An unconditional 'return' within a loop. bufferfragment_p.h 94


BufferFragment split(char c, unsigned int* start)
{
  while (*start < len) {
    int end = indexOf(c, *start);
    if (end == -1) end = len;
    BufferFragment line(d + (*start), end - (*start));
    *start = end + 1;
    return line;
  }
  return BufferFragment();
}

Miranda NG

V612 An unconditional 'break' within a loop. Popup skin.cpp 807


bool PopupSkin::load(LPCTSTR dir)
{
  ....
  while (hFind != INVALID_HANDLE_VALUE) {
    loadSkin(ffd.cFileName);
    break;
    if (!FindNextFile(hFind, &ffd))
      break;
  }
  ....
}

Similar errors can be found in some other places:

  • V612 An unconditional 'break' within a loop. ICQ icq_servlist.cpp 226
  • V612 An unconditional 'continue' within a loop. Ping rawping.cpp 159
  • V612 An unconditional 'return' within a loop. NotifyAnything main.cpp 304
  • And 1 additional diagnostic messages.

LibreOffice

V612 An unconditional 'break' within a loop. dp_manager.cxx 100


OUString getExtensionFolder(....)
{
  ....
  while (xResultSet->next())
  {
    title = Reference<sdbc::XRow>(
      xResultSet, UNO_QUERY_THROW )->getString(1 /* Title */ ) ;
    break;
  }
  return title;
}

Similar errors can be found in some other places:

  • V612 An unconditional 'break' within a loop. svdfppt.cxx 3260
  • V612 An unconditional 'break' within a loop. svdfppt.cxx 3311
  • V612 An unconditional 'break' within a loop. personalization.cxx 454

Unreal Engine 4

V612 An unconditional 'return' within a loop. codegenerator.cpp 2682


bool FNativeClassHeaderGenerator::WillExportEventParms(....)
{
  for(TFieldIterator<UProperty> It(....); It && (It->....); ++It)
  {
    return true;
  }
  return false;
}

Unreal Engine 4

V612 An unconditional 'return' within a loop. unrealaudiotestgenerators.cpp 49


static float WrapTwoPi(float Value)
{
  while (Value >= TWO_PI)
  {
    return Value -= TWO_PI;
  }

  while (Value < 0)
  {
    return Value += TWO_PI;
  }
  return Value;
}

Similar errors can be found in some other places:

  • V612 An unconditional 'return' within a loop. unrealaudiotestgenerators.cpp 54

FreeSWITCH

V612 An unconditional 'goto' within a loop. mod_verto.c 112


static void json_cleanup(void)
{
  ....
top:

  for (hi = switch_core_hash_first_iter(....); hi;) {
    switch_core_hash_this(hi, &var, NULL, &val);
    json = (cJSON *) val;
    cJSON_Delete(json);
    switch_core_hash_delete(json_GLOBALS.store_hash, var);
    goto top;
  }
  switch_safe_free(hi);

  switch_mutex_unlock(json_GLOBALS.store_mutex);
}

Similar errors can be found in some other places:

  • V612 An unconditional 'break' within a loop. mod_event_socket.c 1643
  • V612 An unconditional 'goto' within a loop. mod_verto.c 328
  • V612 An unconditional 'break' within a loop. mod_verto.c 1993

Unreal Engine 4

V612 An unconditional 'break' within a loop. profilermanager.cpp 717


void FProfilerManager::TrackDefaultStats()
{
  // Find StatId for the game thread.
  for( auto It = GetProfilerInstancesIterator(); It; ++It )
  {
    FProfilerSessionRef ProfilerSession = It.Value();
    if( ProfilerSession->GetMetaData()->IsReady() )
    {
      ....;
    }
    break;
  }
}

Casablanca

V612 An unconditional 'break' within a loop. BlackJack_Client140 messagetypes.h 213


web::json::value AsJSON() const
{
  ....
  int idx = 0;
  for (auto iter = cards.begin(); iter != cards.end();)
  {
    jCards[idx++] = iter->AsJSON();
    break;
  }
  ....
}

Inkscape

V612 An unconditional 'break' within a loop. text_reassemble.c 417


int TR_kern_gap(....)
{
  ....
  while(ptsp && tsp){
    ....
    if(!text32){
      ....
      if(!text32)break;
    }
    ....
    if(!ptxt32){
      ....
      if(!ptxt32)break;
    }
    ....
    break; // <=
  }
  ....
  return(kern);
}

LLVM/Clang

V612 An unconditional 'break' within a loop. MachODump.cpp 1206


static bool checkMachOAndArchFlags(....) {
  ....
  unsigned i;
  for (i = 0; i < ArchFlags.size(); ++i) {
    if (ArchFlags[i] == T.getArchName())
      ArchFound = true;
    break;
  }
  ....
}

Similar errors can be found in some other places:

  • V612 An unconditional 'return' within a loop. R600OptimizeVectorRegisters.cpp 54
  • V612 An unconditional 'break' within a loop. llvm-size.cpp 525

CMaNGOS

V612 An unconditional 'break' within a loop. Pet.cpp 1956


void Pet::InitPetCreateSpells()
{
  ....
  for (SkillLineAbilityMap::const_iterator
       _spell_idx = bounds.first; _spell_idx != bounds.second;
       ++_spell_idx)
  {
      usedtrainpoints += _spell_idx->second->reqtrainpoints;
      break;
  }
  ....
}

Similar errors can be found in some other places:

  • V612 An unconditional 'break' within a loop. Pet.cpp 895

Audacity

V612 An unconditional 'return' within a loop. Equalization.cpp 379


bool EffectEqualization::ValidateUI()
{
  while (mDisallowCustom && mCurveName.IsSameAs(wxT("unnamed")))
  {
    wxMessageBox(_("...."),
       _("EQ Curve needs a different name"),
       wxOK | wxCENTRE,
       mUIParent);
    return false;
  }
  ....
}

Rosegarden

V612 An unconditional 'break' within a loop. Fingering.cpp 83


Fingering::Barre
Fingering::getBarre() const
{
  int lastStringStatus = m_strings[getNbStrings() - 1];
  Barre res;
  res.fret = lastStringStatus;

  for(unsigned int i = 0; i < 3; ++i) {
    if (m_strings[i] > OPEN && m_strings[i] == lastStringStatus)
      res.start = i;
      break;
  }

  res.end = 5;
  return res;
}

XNU kernel

V612 CWE-670 An unconditional 'goto' within a loop. kern_descrip.c 628


int
dup2(proc_t p, struct dup2_args *uap, int32_t *retval)
{
  ....
  while ((fdp->fd_ofileflags[new] & UF_RESERVED) == UF_RESERVED)
  {
    fp_drop(p, old, fp, 1);
    procfdtbl_waitfd(p, new);
#if DIAGNOSTIC
    proc_fdlock_assert(p, LCK_MTX_ASSERT_OWNED);
#endif
    goto startover;
  }
  ....
startover:
  ....
}

Strange loop body at the end of which there is an unconditional transition to the label startover.

Similar errors can be found in some other places:

  • V612 CWE-670 An unconditional 'goto' within a loop. tty.c 1084
  • V612 CWE-670 An unconditional 'goto' within a loop. vm_purgeable.c 842
  • V612 CWE-670 An unconditional 'return' within a loop. kern_credential.c 930

RT-Thread

V612 CWE-670 An unconditional 'return' within a loop. stm32f7xx_ll_fmc.c 1029


HAL_StatusTypeDef FMC_SDRAM_SendCommand(....)
{
  ....

  /* wait until command is send */
  while(HAL_IS_BIT_SET(Device->SDSR, FMC_SDSR_BUSY))
  {
    /* Check for the Timeout */
    if(Timeout != HAL_MAX_DELAY)
    {
      if((Timeout == 0)||((HAL_GetTick() - tickstart) > Timeout))
      {
        return HAL_TIMEOUT;
      }
    }

    return HAL_ERROR;
  }

  return HAL_OK;
}

LibreOffice

V612 An unconditional 'return' within a loop. pormulti.cxx 891


SwTextAttr const* MergedAttrIterMulti::NextAttr(....)
{
  ....
  SwpHints const*const pHints(m_pNode->GetpSwpHints());
  if (pHints)
  {
    while (m_CurrentHint < pHints->Count())
    {
      SwTextAttr const*const pHint(pHints->Get(m_CurrentHint));
      ++m_CurrentHint;
      rpNode = m_pNode;
      return pHint;
    }
  }
  return nullptr;
  ....
}

Similar errors can be found in some other places:

  • V612 An unconditional 'return' within a loop. txtfrm.cxx 144
  • V612 An unconditional 'return' within a loop. txtfrm.cxx 202
  • V612 An unconditional 'return' within a loop. txtfrm.cxx 279

LLVM/Clang

V612 [CWE-670] An unconditional 'return' within a loop. R600OptimizeVectorRegisters.cpp 63


static bool
isImplicitlyDef(MachineRegisterInfo &MRI, unsigned Reg) {
  for (MachineRegisterInfo::def_instr_iterator It = MRI.def_instr_begin(Reg),
      E = MRI.def_instr_end(); It != E; ++It) {
    return (*It).isImplicitDef();
  }
  ....
}

MuseScore

V612 An unconditional 'return' within a loop. noteinputbarmodel.cpp 371


int NoteInputBarModel::resolveCurrentVoiceIndex() const
{
  ....
  for (const Element* element: selection()->elements()) {
      return element->voice();
  }
  ....
}

CARLA

V612 An unconditional 'return' within a loop. EndPoint.h 84


static inline auto make_address(const std::string &address) {
  ....
  boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query);
  boost::asio::ip::tcp::resolver::iterator end;
  while (iter != end)
  {
    boost::asio::ip::tcp::endpoint endpoint = *iter++;
    return endpoint.address();
  }
  return boost::asio::ip::make_address(address);
}

GCC

V612 An unconditional 'break' within a loop. ree.cc 985


static bool
combine_reaching_defs (ext_cand *cand,
                       const_rtx set_pat,
                       ext_state *state)
{
  ....
  while (   REG_P (SET_SRC (*dest_sub_rtx))
         && (REGNO (SET_SRC (*dest_sub_rtx)) == REGNO (SET_DEST (set))))
  {
    ....
    if (....)
      break;

    if (....)
      break;

    ....
    break;
  }
}

Xenia

V612 An unconditional 'return' within a loop. single_layout_descriptor_set_pool.cc 110


size_t SingleLayoutDescriptorSetPool::Allocate()
{
  ....
  // Two iterations so if vkAllocateDescriptorSets fails
  // even with a non-zero current_pool_sets_remaining_,
  // another attempt will be made in a new pool.
  for (uint32_t i = 0; i < 2; ++i)
  {
    if (    current_pool_ != VK_NULL_HANDLE
        && !current_pool_sets_remaining_)
    {
        full_pools_.push_back(current_pool_);
        current_pool_ = VK_NULL_HANDLE;
    }
    ....
    --current_pool_sets_remaining_;
    descriptor_sets_.push_back(descriptor_set);

    return descriptor_sets_.size() - 1;
  }
  ....
}