| 811 |
{ |
{ |
| 812 |
log_error("user_list_pool_reload(all_user) error\n"); |
log_error("user_list_pool_reload(all_user) error\n"); |
| 813 |
} |
} |
| 814 |
|
|
| 815 |
|
if (user_stat_update() < 0) |
| 816 |
|
{ |
| 817 |
|
log_error("user_stat_update() error\n"); |
| 818 |
|
} |
| 819 |
|
|
| 820 |
tm_user_list_reload = time(NULL); |
tm_user_list_reload = time(NULL); |
| 821 |
} |
} |
| 822 |
|
|
| 827 |
{ |
{ |
| 828 |
log_error("user_list_pool_reload(online_user) error\n"); |
log_error("user_list_pool_reload(online_user) error\n"); |
| 829 |
} |
} |
| 830 |
|
|
| 831 |
tm_user_online_list_reload = time(NULL); |
tm_user_online_list_reload = time(NULL); |
| 832 |
} |
} |
| 833 |
|
|
| 1089 |
} |
} |
| 1090 |
} |
} |
| 1091 |
|
|
| 1092 |
|
// release lock of section |
| 1093 |
|
if (section_list_rd_unlock(p_section) < 0) |
| 1094 |
|
{ |
| 1095 |
|
log_error("section_list_rd_unlock(sid = %d) error\n", p_section->sid); |
| 1096 |
|
return -2; |
| 1097 |
|
} |
| 1098 |
|
|
| 1099 |
|
return (p_article != NULL && p_article != p_article_cur ? 1 : 0); |
| 1100 |
|
} |
| 1101 |
|
|
| 1102 |
|
int scan_article_in_section_by_uid(SECTION_LIST *p_section, const ARTICLE *p_article_cur, |
| 1103 |
|
int direction, int32_t uid, const ARTICLE **pp_article) |
| 1104 |
|
{ |
| 1105 |
|
ARTICLE *p_article; |
| 1106 |
|
int ret = 0; |
| 1107 |
|
|
| 1108 |
|
if (p_section == NULL || p_article_cur == NULL || pp_article == NULL) |
| 1109 |
|
{ |
| 1110 |
|
log_error("NULL pointer error\n"); |
| 1111 |
|
return -1; |
| 1112 |
|
} |
| 1113 |
|
|
| 1114 |
|
if (p_article_cur->sid != p_section->sid) |
| 1115 |
|
{ |
| 1116 |
|
log_error("Inconsistent SID\n"); |
| 1117 |
|
return -1; |
| 1118 |
|
} |
| 1119 |
|
|
| 1120 |
|
// acquire lock of section |
| 1121 |
|
if ((ret = section_list_rd_lock(p_section)) < 0) |
| 1122 |
|
{ |
| 1123 |
|
log_error("section_list_rd_lock(sid = %d) error\n", p_section->sid); |
| 1124 |
|
return -2; |
| 1125 |
|
} |
| 1126 |
|
|
| 1127 |
|
*pp_article = NULL; |
| 1128 |
|
|
| 1129 |
|
if (direction >= 0) |
| 1130 |
|
{ |
| 1131 |
|
for (p_article = p_article_cur->p_next; p_article != NULL && p_article != p_article_cur; p_article = p_article->p_next) |
| 1132 |
|
{ |
| 1133 |
|
if (p_article->visible && p_article->uid == uid) |
| 1134 |
|
{ |
| 1135 |
|
*pp_article = p_article; |
| 1136 |
|
break; |
| 1137 |
|
} |
| 1138 |
|
} |
| 1139 |
|
} |
| 1140 |
|
else // direction < 0 |
| 1141 |
|
{ |
| 1142 |
|
for (p_article = p_article_cur->p_prior; p_article != NULL && p_article != p_article_cur; p_article = p_article->p_prior) |
| 1143 |
|
{ |
| 1144 |
|
if (p_article->visible && p_article->uid == uid) |
| 1145 |
|
{ |
| 1146 |
|
*pp_article = p_article; |
| 1147 |
|
break; |
| 1148 |
|
} |
| 1149 |
|
} |
| 1150 |
|
} |
| 1151 |
|
|
| 1152 |
|
// release lock of section |
| 1153 |
|
if (section_list_rd_unlock(p_section) < 0) |
| 1154 |
|
{ |
| 1155 |
|
log_error("section_list_rd_unlock(sid = %d) error\n", p_section->sid); |
| 1156 |
|
return -2; |
| 1157 |
|
} |
| 1158 |
|
|
| 1159 |
|
return (p_article != NULL && p_article != p_article_cur ? 1 : 0); |
| 1160 |
|
} |
| 1161 |
|
|
| 1162 |
|
int scan_article_in_section_by_username(SECTION_LIST *p_section, const ARTICLE *p_article_cur, |
| 1163 |
|
int direction, const char *username, const ARTICLE **pp_article) |
| 1164 |
|
{ |
| 1165 |
|
ARTICLE *p_article; |
| 1166 |
|
int ret = 0; |
| 1167 |
|
|
| 1168 |
|
if (p_section == NULL || p_article_cur == NULL || username == NULL || pp_article == NULL) |
| 1169 |
|
{ |
| 1170 |
|
log_error("NULL pointer error\n"); |
| 1171 |
|
return -1; |
| 1172 |
|
} |
| 1173 |
|
|
| 1174 |
|
if (p_article_cur->sid != p_section->sid) |
| 1175 |
|
{ |
| 1176 |
|
log_error("Inconsistent SID\n"); |
| 1177 |
|
return -1; |
| 1178 |
|
} |
| 1179 |
|
|
| 1180 |
|
// acquire lock of section |
| 1181 |
|
if ((ret = section_list_rd_lock(p_section)) < 0) |
| 1182 |
|
{ |
| 1183 |
|
log_error("section_list_rd_lock(sid = %d) error\n", p_section->sid); |
| 1184 |
|
return -2; |
| 1185 |
|
} |
| 1186 |
|
|
| 1187 |
|
*pp_article = NULL; |
| 1188 |
|
|
| 1189 |
|
if (direction >= 0) |
| 1190 |
|
{ |
| 1191 |
|
for (p_article = p_article_cur->p_next; p_article != NULL && p_article != p_article_cur; p_article = p_article->p_next) |
| 1192 |
|
{ |
| 1193 |
|
if (p_article->visible && strcasecmp(p_article->username, username) == 0) |
| 1194 |
|
{ |
| 1195 |
|
*pp_article = p_article; |
| 1196 |
|
break; |
| 1197 |
|
} |
| 1198 |
|
} |
| 1199 |
|
} |
| 1200 |
|
else // direction < 0 |
| 1201 |
|
{ |
| 1202 |
|
for (p_article = p_article_cur->p_prior; p_article != NULL && p_article != p_article_cur; p_article = p_article->p_prior) |
| 1203 |
|
{ |
| 1204 |
|
if (p_article->visible && strcasecmp(p_article->username, username) == 0) |
| 1205 |
|
{ |
| 1206 |
|
*pp_article = p_article; |
| 1207 |
|
break; |
| 1208 |
|
} |
| 1209 |
|
} |
| 1210 |
|
} |
| 1211 |
|
|
| 1212 |
// release lock of section |
// release lock of section |
| 1213 |
if (section_list_rd_unlock(p_section) < 0) |
if (section_list_rd_unlock(p_section) < 0) |
| 1214 |
{ |
{ |