• Tom Lane's avatar
    Avoid leaking memory in RestoreGUCState(), and improve comments. · f0c2a5bb
    Tom Lane authored
    RestoreGUCState applied InitializeOneGUCOption to already-live
    GUC entries, causing any malloc'd subsidiary data to be forgotten.
    We do want the effect of resetting the GUC to its compiled-in
    default, and InitializeOneGUCOption seems like the best way to do
    that, so add code to free any existing subsidiary data beforehand.
    
    The interaction between can_skip_gucvar, SerializeGUCState, and
    RestoreGUCState is way more subtle than their opaque comments
    would suggest to an unwary reader.  Rewrite and enlarge the
    comments to try to make it clearer what's happening.
    
    Remove a long-obsolete assertion in read_nondefault_variables: the
    behavior of set_config_option hasn't depended on IsInitProcessingMode
    since f5d9698a installed a better way of controlling it.
    
    Although this is fixing a clear memory leak, the leak is quite unlikely
    to involve any large amount of data, and it can only happen once in the
    lifetime of a worker process.  So it seems unnecessary to take any
    risk of back-patching.
    
    Discussion: https://postgr.es/m/4105247.1616174862@sss.pgh.pa.us
    f0c2a5bb
guc.c 320 KB