Branch: Tag:

2020-02-25

2020-02-25 01:10:52 by Stephen R. van den Berg <srb@cuci.nl>

pgsql: Disentangle potentially shared empty arrays.

86:   private Thread.Mutex backendmux = Thread.Mutex();   final multiset(proxy) clients = set_weak_flag((<>), Pike.WEAK);    - constant emptyarray = ({}); - constant describenodata -  = (["datarowdesc":emptyarray, "datarowtypes":emptyarray, -  "datatypeoid":emptyarray]); - private constant censoroptions = (<"use_ssl", "force_ssl", + mapping describenodata +  = (["datarowdesc":({}), "datarowtypes":({}), "datatypeoid":({})]); + private multiset censoroptions = (<"use_ssl", "force_ssl",    "cache_autoprepared_statements", "reconnect", "text_query", "is_superuser",    "server_encoding", "server_version", "integer_datetimes",    "session_authorization">);
622:    catch {    foreach (runningportals; sql_result result; )    if (!result.datarowtypes) { -  result.datarowtypes = emptyarray; +  result.datarowtypes = ({});    if (result._state != PURGED && !result.delayederror)    result.delayederror = LOSTERROR;    result._ddescribe->broadcast();
867:    }       final array(string) _showbindings() { -  array(string) msgs = emptyarray; +  array(string) msgs = ({});    if (_params) {    array from, to, paramValues;    [from, to, paramValues] = _params;
1000:    waitfordescribe();    if (!datarowdesc)    error(LOSTERROR); -  return datarowdesc + emptyarray; +  return datarowdesc + ({});    }      #ifdef PG_DEBUG
1145:    }       final void _preparebind(array dtoid) { -  array(string|int) paramValues = _params ? _params[2] : emptyarray; +  array(string|int) paramValues = _params ? _params[2] : ({});    if (sizeof(dtoid) != sizeof(paramValues))    SUSERERROR("Invalid number of bindings, expected %d, got %d\n",    sizeof(dtoid), sizeof(paramValues));
1518:    if (!datarowtypes) {    if (_state != PURGED && !delayederror)    delayederror = LOSTERROR; -  datarowtypes = emptyarray; +  datarowtypes = ({});    _ddescribe->broadcast();    }    if (delayederror && pgsqlsess && !pgsqlsess.delayederror)
1757:    private int backendpid;    final int(-128..127) backendstatus;    final mapping(string:mixed) options; -  private array(string) lastmessage = emptyarray; +  private array(string) lastmessage = ({});    final int(0..1) clearmessage;    final int(0..1) untolderror;    private mapping(string:array(mixed)) notifylist = ([]);
1838:    untolderror = 0;    string s = lastmessage * "\n";    if (clear) -  lastmessage = emptyarray; +  lastmessage = ({});    warningscollected = 0;    return sizeof(s) && s;    }
1888:    }       private array(string) showbindings(sql_result portal) { -  return portal ? portal._showbindings() : emptyarray; +  return portal ? portal._showbindings() : ({});    }       private void preplastmessage(mapping(string:string) msgresponse) {
2020: Inside #if defined(PG_DEBUG)
   if (msglen < 1)    errtype = PROTOCOLERROR;   #endif -  array ret = emptyarray, aw = ({0}); +  array ret = ({}), aw = ({0});    do {    string w = cr->read_cstring();    msglen -= sizeof(w) + 1; aw[0] = w; ret += aw;
2317:    PD("NoData %O\n", portal._query);   #endif    portal._fetchlimit = 0; // disables subsequent Executes -  portal->_processrowdesc(emptyarray, emptyarray); +  portal->_processrowdesc(({}), ({}));    portal = 0;    break;    }
2494:    if (clearmessage) {    warningsdropcount += warningscollected;    clearmessage = warningscollected = 0; -  lastmessage = emptyarray; +  lastmessage = ({});    }    warningscollected++;    lastmessage = ({sprintf("%s %s: %s",