一段C++代码我怎么看都不像 线程阻塞,实际运行后确实阻塞了,求解答

void IDecode::Update(XData pkt) {
    if (pkt.isAudio != isAudio) {
        return;
    }
    XLOGI("更新数据%d   %d", pkt.data, pkt.size);
    while (!isExit) {
        packsMutex.lock();

        //阻塞
        if (packs.size() < maxList) {
            //生产者
            packs.push_back(pkt);
            packsMutex.unlock();
            break;
        }
//        XLOGI("线程阻塞了吗%d   %d", pkt.data, pkt.size);
        packsMutex.unlock();

    }
}

这个方法运行在一个线程中,不断地被调用。我实际测了一下packs.size() < maxList的值是false的时候,线程就阻塞,该方法不再被调用。false情况下,也是线程加锁解锁的过程,我看不出来哪里阻塞了求解答。

packsMutex.lock();
这里就是阻塞,如果有别的thread调用了packsMutex.lock,这里会挂起等待,直到unlock