显存模式里的双buffer模式和direct mode什么时候会同时打开?

在lv_refr.c里面,代码如下:

 /*Copy invalid areas for sync next refresh*/
 if (disp_refr->driver->direct_mode && disp_refr->driver->draw_buf->buf2) { 
 //if (disp_refr->driver->direct_mode) {
     //LV_LOG_USER("111111111\n");
     uint16_t i;
     for (i = 0; i < disp_refr->inv_p; i++) {
         if (disp_refr->inv_area_joined[i])
             continue;

         lv_area_t* sync_area = _lv_ll_ins_tail(&disp_refr->sync_areas);
         *sync_area = disp_refr->inv_areas[i];
     }
 }

这里的_lv_ll_ins_tail()函数会一直melloc空间,但是在这段代码的下面有一个函数:

lv_mem_buf_free_all();

我看备注是释放所有申请的mem,但实际上没有效果。这样的话,在MCU里面开启了双buffer,如果还使用了direct mode,那内存会一直被申请,直到最后崩溃。

1.请问这是什么情况?
2. double buffer mode和direct moder难道是互斥的?