Guest User

Untitled

a guest
Jul 23rd, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.47 KB | None | 0 0
  1. diff --git a/src/importer.c b/src/importer.c
  2. index bf005b19..ef68bd5a 100644
  3. --- a/src/importer.c
  4. +++ b/src/importer.c
  5. @@ -74,7 +74,7 @@ static int importer___user_add(struct importer_s *importer, struct user_s **u_,
  6. return 0;
  7. }
  8.  
  9. - if (0 > user_item_allocate(u_, user->n_custom_parameters)) {
  10. + if (0 > user_item_allocate(u_)) {
  11. importer->no_memory_for_user ++;
  12. return -1;
  13. }
  14. @@ -150,6 +150,11 @@ static int importer___user_add(struct importer_s *importer, struct user_s **u_,
  15. u->language_id = user->language_id;
  16. }
  17.  
  18. + if (0 > custom_parameters_enlarge(&u, user->n_custom_parameters)) {
  19. + zlog_error("no mem");
  20. + return -1;
  21. + }
  22. +
  23. for (unsigned i = 0; i < user->n_custom_parameters; i++) {
  24. u->custom_parameters[i].id = user->custom_parameters[i]->id;
  25. u->custom_parameters[i].value = user->custom_parameters[i]->value;
  26. diff --git a/src/meetmaker_gpb.c b/src/meetmaker_gpb.c
  27. index 709150ad..cd5098e0 100644
  28. --- a/src/meetmaker_gpb.c
  29. +++ b/src/meetmaker_gpb.c
  30. @@ -130,19 +130,16 @@ gpbrpc_method_result_t meetmaker__user_update(gpbrpc_request_t *rctx, Badoo__Mee
  31. }
  32. }
  33.  
  34. - if (request->n_custom_parameters > u->n_custom_parameters) {
  35. - if (custom_parameters_realloc(&u, request->n_custom_parameters) < 0) {
  36. - u->n_custom_parameters = 0;
  37. - return res_no_mem(rctx);
  38. - }
  39. - u->n_custom_parameters = request->n_custom_parameters;
  40. + /* preallocate memory if needed */
  41. + if (custom_parameters_enlarge(&u, request->n_custom_parameters) < 0) {
  42. + return res_no_mem(rctx);
  43. }
  44. - }
  45.  
  46. - for (unsigned i = 0; i < request->n_custom_parameters; i++) {
  47. - update_engine__user_custom_parameter_upd(update_ctx, u,
  48. - request->custom_parameters[i]->id,
  49. - request->custom_parameters[i]->value);
  50. + for (unsigned i = 0; i < request->n_custom_parameters; i++) {
  51. + update_engine__user_custom_parameter_upd(update_ctx, u,
  52. + request->custom_parameters[i]->id,
  53. + request->custom_parameters[i]->value);
  54. + }
  55. }
  56.  
  57. if (request->has_gender) {
  58. @@ -285,7 +282,7 @@ static int add_new_user(update_t *update_ctx, struct city_s *city, Badoo__Meetma
  59. {
  60. struct user_s *u;
  61.  
  62. - if (0 > user_item_allocate(&u, request->n_custom_parameters)) {
  63. + if (0 > user_item_allocate(&u)) {
  64. return -1;
  65. }
  66.  
  67. @@ -390,10 +387,16 @@ static int add_new_user(update_t *update_ctx, struct city_s *city, Badoo__Meetma
  68.  
  69. u->rating_int = user_rating_compute(u);
  70.  
  71. - for (unsigned i = 0; i < request->n_custom_parameters; i++) {
  72. - u->custom_parameters[i].id = request->custom_parameters[i]->id;
  73. - u->custom_parameters[i].value = request->custom_parameters[i]->value;
  74. - u->n_custom_parameters++;
  75. + {
  76. + if (0 > custom_parameters_enlarge(&u, request->n_custom_parameters)) {
  77. + return -1;
  78. + }
  79. +
  80. + for (unsigned i = 0; i < request->n_custom_parameters; i++) {
  81. + u->custom_parameters[i].id = request->custom_parameters[i]->id;
  82. + u->custom_parameters[i].value = request->custom_parameters[i]->value;
  83. + u->n_custom_parameters++;
  84. + }
  85. }
  86.  
  87. if (0 > user_refs_add(update_ctx, u, city)) {
  88. diff --git a/src/update_engine.c b/src/update_engine.c
  89. index f368b078..addef187 100644
  90. --- a/src/update_engine.c
  91. +++ b/src/update_engine.c
  92. @@ -2819,7 +2819,6 @@ int update_engine__user_custom_parameter_upd(update_t *upd, struct user_s *u, ui
  93. }
  94.  
  95. int cpindex = -1;
  96. - int freeindex = -1;
  97.  
  98. for (unsigned i = 0; i < u->n_custom_parameters; i++) {
  99. if (u->custom_parameters[i].id == id) {
  100. @@ -2830,11 +2829,6 @@ int update_engine__user_custom_parameter_upd(update_t *upd, struct user_s *u, ui
  101. }
  102. cpindex = i;
  103. }
  104. - /* this is possible when we add several new params at once with one realloc() */
  105. - if (u->custom_parameters[i].id == 0) {
  106. - freeindex = i;
  107. - break;
  108. - }
  109. }
  110.  
  111. if (cpindex >= 0) { // custom parameter with this id is found
  112. @@ -2843,12 +2837,8 @@ int update_engine__user_custom_parameter_upd(update_t *upd, struct user_s *u, ui
  113. }
  114.  
  115. u->custom_parameters[cpindex].value = value_new;
  116. - } else if (freeindex != -1) {
  117. - u->custom_parameters[freeindex].id = id;
  118. - u->custom_parameters[freeindex].value = value_new;
  119. } else {
  120. - if (custom_parameters_realloc(&u, u->n_custom_parameters + 1) < 0) {
  121. - u->n_custom_parameters = 0;
  122. + if (custom_parameters_enlarge(&u, u->n_custom_parameters + 1) < 0) {
  123. return -1;
  124. }
  125. u->custom_parameters[u->n_custom_parameters].id = id;
  126. diff --git a/src/user.c b/src/user.c
  127. index a667b77e..7137bc49 100644
  128. --- a/src/user.c
  129. +++ b/src/user.c
  130. @@ -369,28 +369,23 @@ void user_refs_remove(update_t *upd, struct user_s *u)
  131. u->is_deleted = 1;
  132. }
  133.  
  134. -int custom_parameters_realloc(struct user_s **user, size_t n_custom_parameters)
  135. +int custom_parameters_enlarge(struct user_s **user, size_t n_custom_parameters)
  136. {
  137. - if (n_custom_parameters == 0) {
  138. - if ((*user)->n_custom_parameters > 0) {
  139. - free((*user)->custom_parameters);
  140. - (*user)->custom_parameters = NULL;
  141. - }
  142. + if ((*user)->n_custom_parameters >= n_custom_parameters) {
  143. return 0;
  144. }
  145.  
  146. - (*user)->custom_parameters = realloc((*user)->custom_parameters, sizeof(struct user_custom_parameter_s) * n_custom_parameters);
  147. - if (!(*user)->custom_parameters) {
  148. + void *newarray = realloc((*user)->custom_parameters, sizeof(struct user_custom_parameter_s) * n_custom_parameters);
  149. + if (!newarray) {
  150. return -1;
  151. }
  152.  
  153. - if (n_custom_parameters > (*user)->n_custom_parameters) {
  154. - memset((*user)->custom_parameters + (*user)->n_custom_parameters, 0, (n_custom_parameters - (*user)->n_custom_parameters) * sizeof(struct user_custom_parameter_s));
  155. - }
  156. + (*user)->custom_parameters = newarray;
  157. +
  158. return 0;
  159. }
  160.  
  161. -int user_item_allocate(struct user_s **ret_p, size_t n_custom_parameters)
  162. +int user_item_allocate(struct user_s **ret_p)
  163. {
  164. struct user_s *user;
  165.  
  166. @@ -410,11 +405,6 @@ int user_item_allocate(struct user_s **ret_p, size_t n_custom_parameters)
  167. return -1;
  168. }
  169.  
  170. - if (custom_parameters_realloc(&user, n_custom_parameters) < 0) {
  171. - user->n_custom_parameters = 0;
  172. - return -1;
  173. - }
  174. -
  175. INIT_LIST_HEAD(&(user->city_list));
  176.  
  177. if (0 > user___vote_storage_init_func(&user->votes_out)) {
  178. diff --git a/src/user.h b/src/user.h
  179. index a43bec49..2e624cbb 100644
  180. --- a/src/user.h
  181. +++ b/src/user.h
  182. @@ -222,8 +222,9 @@ struct user_s {
  183.  
  184.  
  185.  
  186. -int user_item_allocate(struct user_s **ret_p, size_t n_custom_parameters);
  187. -int custom_parameters_realloc(struct user_s **user, size_t n_custom_parameters);
  188. +int user_item_allocate(struct user_s **ret_p);
  189. +int custom_parameters_enlarge(struct user_s **user, size_t n_custom_parameters);
  190. +
  191. void user_item_free(struct user_s *u); /* unused */
  192. size_t user_slabs_mem_usage();
  193. int user_refs_add(update_t *update_ctx, struct user_s *u, struct city_s *city);
Add Comment
Please, Sign In to add comment