Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/importer.c b/src/importer.c
- index bf005b19..ef68bd5a 100644
- --- a/src/importer.c
- +++ b/src/importer.c
- @@ -74,7 +74,7 @@ static int importer___user_add(struct importer_s *importer, struct user_s **u_,
- return 0;
- }
- - if (0 > user_item_allocate(u_, user->n_custom_parameters)) {
- + if (0 > user_item_allocate(u_)) {
- importer->no_memory_for_user ++;
- return -1;
- }
- @@ -150,6 +150,11 @@ static int importer___user_add(struct importer_s *importer, struct user_s **u_,
- u->language_id = user->language_id;
- }
- + if (0 > custom_parameters_enlarge(&u, user->n_custom_parameters)) {
- + zlog_error("no mem");
- + return -1;
- + }
- +
- for (unsigned i = 0; i < user->n_custom_parameters; i++) {
- u->custom_parameters[i].id = user->custom_parameters[i]->id;
- u->custom_parameters[i].value = user->custom_parameters[i]->value;
- diff --git a/src/meetmaker_gpb.c b/src/meetmaker_gpb.c
- index 709150ad..cd5098e0 100644
- --- a/src/meetmaker_gpb.c
- +++ b/src/meetmaker_gpb.c
- @@ -130,19 +130,16 @@ gpbrpc_method_result_t meetmaker__user_update(gpbrpc_request_t *rctx, Badoo__Mee
- }
- }
- - if (request->n_custom_parameters > u->n_custom_parameters) {
- - if (custom_parameters_realloc(&u, request->n_custom_parameters) < 0) {
- - u->n_custom_parameters = 0;
- - return res_no_mem(rctx);
- - }
- - u->n_custom_parameters = request->n_custom_parameters;
- + /* preallocate memory if needed */
- + if (custom_parameters_enlarge(&u, request->n_custom_parameters) < 0) {
- + return res_no_mem(rctx);
- }
- - }
- - for (unsigned i = 0; i < request->n_custom_parameters; i++) {
- - update_engine__user_custom_parameter_upd(update_ctx, u,
- - request->custom_parameters[i]->id,
- - request->custom_parameters[i]->value);
- + for (unsigned i = 0; i < request->n_custom_parameters; i++) {
- + update_engine__user_custom_parameter_upd(update_ctx, u,
- + request->custom_parameters[i]->id,
- + request->custom_parameters[i]->value);
- + }
- }
- if (request->has_gender) {
- @@ -285,7 +282,7 @@ static int add_new_user(update_t *update_ctx, struct city_s *city, Badoo__Meetma
- {
- struct user_s *u;
- - if (0 > user_item_allocate(&u, request->n_custom_parameters)) {
- + if (0 > user_item_allocate(&u)) {
- return -1;
- }
- @@ -390,10 +387,16 @@ static int add_new_user(update_t *update_ctx, struct city_s *city, Badoo__Meetma
- u->rating_int = user_rating_compute(u);
- - for (unsigned i = 0; i < request->n_custom_parameters; i++) {
- - u->custom_parameters[i].id = request->custom_parameters[i]->id;
- - u->custom_parameters[i].value = request->custom_parameters[i]->value;
- - u->n_custom_parameters++;
- + {
- + if (0 > custom_parameters_enlarge(&u, request->n_custom_parameters)) {
- + return -1;
- + }
- +
- + for (unsigned i = 0; i < request->n_custom_parameters; i++) {
- + u->custom_parameters[i].id = request->custom_parameters[i]->id;
- + u->custom_parameters[i].value = request->custom_parameters[i]->value;
- + u->n_custom_parameters++;
- + }
- }
- if (0 > user_refs_add(update_ctx, u, city)) {
- diff --git a/src/update_engine.c b/src/update_engine.c
- index f368b078..addef187 100644
- --- a/src/update_engine.c
- +++ b/src/update_engine.c
- @@ -2819,7 +2819,6 @@ int update_engine__user_custom_parameter_upd(update_t *upd, struct user_s *u, ui
- }
- int cpindex = -1;
- - int freeindex = -1;
- for (unsigned i = 0; i < u->n_custom_parameters; i++) {
- if (u->custom_parameters[i].id == id) {
- @@ -2830,11 +2829,6 @@ int update_engine__user_custom_parameter_upd(update_t *upd, struct user_s *u, ui
- }
- cpindex = i;
- }
- - /* this is possible when we add several new params at once with one realloc() */
- - if (u->custom_parameters[i].id == 0) {
- - freeindex = i;
- - break;
- - }
- }
- if (cpindex >= 0) { // custom parameter with this id is found
- @@ -2843,12 +2837,8 @@ int update_engine__user_custom_parameter_upd(update_t *upd, struct user_s *u, ui
- }
- u->custom_parameters[cpindex].value = value_new;
- - } else if (freeindex != -1) {
- - u->custom_parameters[freeindex].id = id;
- - u->custom_parameters[freeindex].value = value_new;
- } else {
- - if (custom_parameters_realloc(&u, u->n_custom_parameters + 1) < 0) {
- - u->n_custom_parameters = 0;
- + if (custom_parameters_enlarge(&u, u->n_custom_parameters + 1) < 0) {
- return -1;
- }
- u->custom_parameters[u->n_custom_parameters].id = id;
- diff --git a/src/user.c b/src/user.c
- index a667b77e..7137bc49 100644
- --- a/src/user.c
- +++ b/src/user.c
- @@ -369,28 +369,23 @@ void user_refs_remove(update_t *upd, struct user_s *u)
- u->is_deleted = 1;
- }
- -int custom_parameters_realloc(struct user_s **user, size_t n_custom_parameters)
- +int custom_parameters_enlarge(struct user_s **user, size_t n_custom_parameters)
- {
- - if (n_custom_parameters == 0) {
- - if ((*user)->n_custom_parameters > 0) {
- - free((*user)->custom_parameters);
- - (*user)->custom_parameters = NULL;
- - }
- + if ((*user)->n_custom_parameters >= n_custom_parameters) {
- return 0;
- }
- - (*user)->custom_parameters = realloc((*user)->custom_parameters, sizeof(struct user_custom_parameter_s) * n_custom_parameters);
- - if (!(*user)->custom_parameters) {
- + void *newarray = realloc((*user)->custom_parameters, sizeof(struct user_custom_parameter_s) * n_custom_parameters);
- + if (!newarray) {
- return -1;
- }
- - if (n_custom_parameters > (*user)->n_custom_parameters) {
- - memset((*user)->custom_parameters + (*user)->n_custom_parameters, 0, (n_custom_parameters - (*user)->n_custom_parameters) * sizeof(struct user_custom_parameter_s));
- - }
- + (*user)->custom_parameters = newarray;
- +
- return 0;
- }
- -int user_item_allocate(struct user_s **ret_p, size_t n_custom_parameters)
- +int user_item_allocate(struct user_s **ret_p)
- {
- struct user_s *user;
- @@ -410,11 +405,6 @@ int user_item_allocate(struct user_s **ret_p, size_t n_custom_parameters)
- return -1;
- }
- - if (custom_parameters_realloc(&user, n_custom_parameters) < 0) {
- - user->n_custom_parameters = 0;
- - return -1;
- - }
- -
- INIT_LIST_HEAD(&(user->city_list));
- if (0 > user___vote_storage_init_func(&user->votes_out)) {
- diff --git a/src/user.h b/src/user.h
- index a43bec49..2e624cbb 100644
- --- a/src/user.h
- +++ b/src/user.h
- @@ -222,8 +222,9 @@ struct user_s {
- -int user_item_allocate(struct user_s **ret_p, size_t n_custom_parameters);
- -int custom_parameters_realloc(struct user_s **user, size_t n_custom_parameters);
- +int user_item_allocate(struct user_s **ret_p);
- +int custom_parameters_enlarge(struct user_s **user, size_t n_custom_parameters);
- +
- void user_item_free(struct user_s *u); /* unused */
- size_t user_slabs_mem_usage();
- int user_refs_add(update_t *update_ctx, struct user_s *u, struct city_s *city);
Add Comment
Please, Sign In to add comment