/[LeafOK_CVS]/lbbs/src/user_list.c
ViewVC logotype

Diff of /lbbs/src/user_list.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.11 by sysadm, Wed Oct 22 11:48:04 2025 UTC Revision 1.12 by sysadm, Wed Oct 22 14:25:15 2025 UTC
# Line 119  static int user_info_index_uid_comp(cons Line 119  static int user_info_index_uid_comp(cons
119    
120  int user_list_load(MYSQL *db, USER_LIST *p_list)  int user_list_load(MYSQL *db, USER_LIST *p_list)
121  {  {
122            USER_INFO_INDEX_UID index_uid[BBS_max_user_count];
123          MYSQL_RES *rs = NULL;          MYSQL_RES *rs = NULL;
124          MYSQL_ROW row;          MYSQL_ROW row;
125          char sql[SQL_BUFFER_LEN];          char sql[SQL_BUFFER_LEN];
# Line 177  int user_list_load(MYSQL *db, USER_LIST Line 178  int user_list_load(MYSQL *db, USER_LIST
178                  p_list->users[i].birthday = (row[9] == NULL ? 0 : atol(row[9]));                  p_list->users[i].birthday = (row[9] == NULL ? 0 : atol(row[9]));
179    
180                  // index                  // index
181                  p_list->index_uid[i].uid = p_list->users[i].uid;                  index_uid[i].uid = p_list->users[i].uid;
182                  p_list->index_uid[i].id = i;                  index_uid[i].id = i;
183    
184                  i++;                  i++;
185                  if (i >= BBS_max_user_count)                  if (i >= BBS_max_user_count)
# Line 193  int user_list_load(MYSQL *db, USER_LIST Line 194  int user_list_load(MYSQL *db, USER_LIST
194          // Sort index          // Sort index
195          if (i != p_list->user_count || p_list->users[i - 1].uid != last_uid) // Count of users changed          if (i != p_list->user_count || p_list->users[i - 1].uid != last_uid) // Count of users changed
196          {          {
197                  qsort(p_list->index_uid, (size_t)i, sizeof(USER_INFO_INDEX_UID), user_info_index_uid_comp);                  qsort(index_uid, (size_t)i, sizeof(USER_INFO_INDEX_UID), user_info_index_uid_comp);
198                    memcpy(p_list->index_uid, index_uid, sizeof(USER_INFO_INDEX_UID) * (size_t)i);
199    
200  #ifdef _DEBUG  #ifdef _DEBUG
201                  log_error("Rebuild index of %d users, last_uid=%d\n", i, p_list->users[i - 1].uid);                  log_error("Rebuild index of %d users, last_uid=%d\n", i, p_list->users[i - 1].uid);
202  #endif  #endif
# Line 253  int user_online_list_load(MYSQL *db, USE Line 256  int user_online_list_load(MYSQL *db, USE
256                  strncpy(p_list->users[i].session_id, row[0], sizeof(p_list->users[i].session_id) - 1);                  strncpy(p_list->users[i].session_id, row[0], sizeof(p_list->users[i].session_id) - 1);
257                  p_list->users[i].session_id[sizeof(p_list->users[i].session_id) - 1] = '\0';                  p_list->users[i].session_id[sizeof(p_list->users[i].session_id) - 1] = '\0';
258    
259                  if ((ret = query_user_info_by_uid(atoi(row[1]), &(p_list->users[i].user_info))) < 0)                  if ((ret = query_user_info_by_uid(atoi(row[1]), &(p_list->users[i].user_info))) <= 0)
                 {  
                         log_error("query_user_info(%d) error\n", atoi(row[1]));  
                         continue;  
                 }  
                 else if (ret == 0) // skip Guest  
260                  {                  {
261                            log_error("query_user_info_by_uid(%d) error\n", atoi(row[1]));
262                          continue;                          continue;
263                  }                  }
264    
# Line 514  int user_list_pool_reload(int online_use Line 513  int user_list_pool_reload(int online_use
513                          ret = -2;                          ret = -2;
514                          goto cleanup;                          goto cleanup;
515                  }                  }
   
                 // No online user, no need to swap lists  
                 if (p_user_list_pool->p_online_current->user_count == 0 && p_user_list_pool->p_online_new->user_count == 0)  
                 {  
                         goto cleanup;  
                 }  
516          }          }
517          else          else
518          {          {
# Line 731  int query_user_list(int page_id, USER_IN Line 724  int query_user_list(int page_id, USER_IN
724                  return -1;                  return -1;
725          }          }
726    
727            *p_user_count = 0;
728            *p_page_count = 0;
729    
730          // acquire lock of user list          // acquire lock of user list
731          if (user_list_rd_lock(p_user_list_pool->semid) < 0)          if (user_list_rd_lock(p_user_list_pool->semid) < 0)
732          {          {
# Line 784  int query_user_online_list(int page_id, Line 780  int query_user_online_list(int page_id,
780                  return -1;                  return -1;
781          }          }
782    
783            *p_user_count = 0;
784            *p_page_count = 0;
785    
786          // acquire lock of user list          // acquire lock of user list
787          if (user_list_rd_lock(p_user_list_pool->semid) < 0)          if (user_list_rd_lock(p_user_list_pool->semid) < 0)
788          {          {
# Line 881  int query_user_info_by_uid(int32_t uid, Line 880  int query_user_info_by_uid(int32_t uid,
880                  return -2;                  return -2;
881          }          }
882    
883            if (p_user_list_pool->p_current->index_uid[0].uid != 1)
884            {
885                    log_error("Incorrect index\n");
886            }
887    
888          left = 0;          left = 0;
889          right = p_user_list_pool->p_current->user_count - 1;          right = p_user_list_pool->p_current->user_count - 1;
890    
# Line 905  int query_user_info_by_uid(int32_t uid, Line 909  int query_user_info_by_uid(int32_t uid,
909          if (uid == p_user_list_pool->p_current->index_uid[left].uid) // Found          if (uid == p_user_list_pool->p_current->index_uid[left].uid) // Found
910          {          {
911                  id = p_user_list_pool->p_current->index_uid[left].id;                  id = p_user_list_pool->p_current->index_uid[left].id;
912                  if ((ret = query_user_info(id, p_user)) <= 0)                  *p_user = p_user_list_pool->p_current->users[id];
913                  {                  ret = 1;
                         log_error("query_user_info(id=%d) error: %d\n", id, ret);  
                 }  
                 else  
                 {  
                         ret = 1;  
                 }  
914          }          }
915    
916          // release lock of user list          // release lock of user list
# Line 1024  int query_user_online_info_by_uid(int32_ Line 1022  int query_user_online_info_by_uid(int32_
1022                           uid == p_user_list_pool->p_online_current->index_uid[id].uid;                           uid == p_user_list_pool->p_online_current->index_uid[id].uid;
1023                           id++, i++)                           id++, i++)
1024                  {                  {
1025                          if ((ret = query_user_online_info(id, &(p_users[i]))) <= 0)                          p_users[i] = p_user_list_pool->p_online_current->users[id];
1026                          {                          log_error("Debug: i=%d id=%d users[i].id=%d\n", i, id, p_users[i].id);
                                 log_error("query_user_info(id=%d) error: %d\n", id, ret);  
                                 ret = -3;  
                                 break;  
                         }  
1027                  }                  }
1028    
1029                  if (ret > 0 && i > 0)                  if (i > 0)
1030                  {                  {
1031                          *p_user_cnt = i;                          *p_user_cnt = i;
1032                          ret = 1;                          ret = 1;


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1