Navigation


Changeset 1388:61e693afccc6 in freeDiameter


Ignore:
Timestamp:
Oct 15, 2019, 11:26:03 PM (4 years ago)
Author:
Thomas Klausner <tk@giga.or.at>
Branch:
default
Phase:
public
Message:

rt_rewrite: improve locking

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/rt_rewrite/rt_rewrite.c

    r1341 r1388  
    392392        }
    393393
     394        if (pthread_rwlock_wrlock(&rt_rewrite_lock) != 0) {
     395                fd_log_error("%s: locking failed, aborting message rewrite", MODULE_NAME);
     396                return errno;
     397        }
     398
    394399        if ((store=store_new()) == NULL) {
    395400                fd_log_error("%s: malloc failure");
     401                pthread_rwlock_unlock(&rt_rewrite_lock);
    396402                return ENOMEM;
    397403        }
     
    399405                fd_log_notice("%s: error parsing message", MODULE_NAME);
    400406                free(store);
     407                pthread_rwlock_unlock(&rt_rewrite_lock);
    401408                return ret;
    402409        }
     
    404411                fd_log_notice("internal error: message has no child");
    405412                free(store);
     413                pthread_rwlock_unlock(&rt_rewrite_lock);
    406414                return ret;
    407415        }
     
    409417                fd_log_error("%s: replace AVP function failed", MODULE_NAME);
    410418                store_free(store);
     419                pthread_rwlock_unlock(&rt_rewrite_lock);
    411420                return -1;
    412421        }
    413         return store_apply(*msg, &store);
     422        ret = store_apply(*msg, &store);
     423
     424        if (pthread_rwlock_unlock(&rt_rewrite_lock) != 0) {
     425                fd_log_error("%s: unlocking failed, returning error", MODULE_NAME);
     426                return errno;
     427        }
     428
     429        return ret;
    414430}
    415431
Note: See TracChangeset for help on using the changeset viewer.