Print this page
11972 resync smatch


 121         int i1 = 0, i2 = 0;
 122         const void *buffer[2 * LIST_NODE_NR];
 123         int nbuf = 0;
 124         struct ptr_list *newhead = b1;
 125 
 126         // printf ("Merging %d blocks at %p with %d blocks at %p\n", n, b1, m, b2);
 127 
 128         // Skip empty blocks in b2.
 129         while (b2->nr == 0) {
 130                 BEEN_THERE('F');
 131                 b2 = b2->next;
 132                 if (--m == 0) {
 133                         BEEN_THERE('G');
 134                         return newhead;
 135                 }
 136         }
 137 
 138         // Do a quick skip in case entire blocks from b1 are
 139         // already less than smallest element in b2.
 140         while (b1->nr == 0 ||
 141                cmp (PTR_ENTRY(b1, b1->nr - 1), PTR_ENTRY(b2,0)) < 0) {
 142                 // printf ("Skipping whole block.\n");
 143                 BEEN_THERE('H');
 144                 b1 = b1->next;
 145                 if (--n == 0) {
 146                         BEEN_THERE('I');
 147                         return newhead; 
 148                 }
 149         }
 150 
 151         while (1) {
 152                 const void *d1 = PTR_ENTRY(b1,i1);
 153                 const void *d2 = PTR_ENTRY(b2,i2);
 154 
 155                 assert (i1 >= 0 && i1 < b1->nr);
 156                 assert (i2 >= 0 && i2 < b2->nr);
 157                 assert (b1 != b2);
 158                 assert (n > 0);
 159                 assert (m > 0);
 160 
 161                 if (cmp (d1, d2) <= 0) {
 162                         BEEN_THERE('J');
 163                         buffer[nbuf++] = d1;
 164                         // Element from b1 is smaller
 165                         if (++i1 >= b1->nr) {
 166                                 BEEN_THERE('L');
 167                                 FLUSH_TO(b1);
 168                                 do {
 169                                         b1 = b1->next;
 170                                         if (--n == 0) {
 171                                                 BEEN_THERE('O');
 172                                                 while (b1 != b2) {
 173                                                         BEEN_THERE('P');




 121         int i1 = 0, i2 = 0;
 122         const void *buffer[2 * LIST_NODE_NR];
 123         int nbuf = 0;
 124         struct ptr_list *newhead = b1;
 125 
 126         // printf ("Merging %d blocks at %p with %d blocks at %p\n", n, b1, m, b2);
 127 
 128         // Skip empty blocks in b2.
 129         while (b2->nr == 0) {
 130                 BEEN_THERE('F');
 131                 b2 = b2->next;
 132                 if (--m == 0) {
 133                         BEEN_THERE('G');
 134                         return newhead;
 135                 }
 136         }
 137 
 138         // Do a quick skip in case entire blocks from b1 are
 139         // already less than smallest element in b2.
 140         while (b1->nr == 0 ||
 141                cmp (PTR_ENTRY_NOTAG(b1, b1->nr - 1), PTR_ENTRY_NOTAG(b2,0)) < 0) {
 142                 // printf ("Skipping whole block.\n");
 143                 BEEN_THERE('H');
 144                 b1 = b1->next;
 145                 if (--n == 0) {
 146                         BEEN_THERE('I');
 147                         return newhead; 
 148                 }
 149         }
 150 
 151         while (1) {
 152                 const void *d1 = PTR_ENTRY_NOTAG(b1,i1);
 153                 const void *d2 = PTR_ENTRY_NOTAG(b2,i2);
 154 
 155                 assert (i1 >= 0 && i1 < b1->nr);
 156                 assert (i2 >= 0 && i2 < b2->nr);
 157                 assert (b1 != b2);
 158                 assert (n > 0);
 159                 assert (m > 0);
 160 
 161                 if (cmp (d1, d2) <= 0) {
 162                         BEEN_THERE('J');
 163                         buffer[nbuf++] = d1;
 164                         // Element from b1 is smaller
 165                         if (++i1 >= b1->nr) {
 166                                 BEEN_THERE('L');
 167                                 FLUSH_TO(b1);
 168                                 do {
 169                                         b1 = b1->next;
 170                                         if (--n == 0) {
 171                                                 BEEN_THERE('O');
 172                                                 while (b1 != b2) {
 173                                                         BEEN_THERE('P');