1. 25 1月, 2015 1 次提交
    • T
      Replace a bunch more uses of strncpy() with safer coding. · 586dd5d6
      Tom Lane 提交于
      strncpy() has a well-deserved reputation for being unsafe, so make an
      effort to get rid of nearly all occurrences in HEAD.
      
      A large fraction of the remaining uses were passing length less than or
      equal to the known strlen() of the source, in which case no null-padding
      can occur and the behavior is equivalent to memcpy(), though doubtless
      slower and certainly harder to reason about.  So just use memcpy() in
      these cases.
      
      In other cases, use either StrNCpy() or strlcpy() as appropriate (depending
      on whether padding to the full length of the destination buffer seems
      useful).
      
      I left a few strncpy() calls alone in the src/timezone/ code, to keep it
      in sync with upstream (the IANA tzcode distribution).  There are also a
      few such calls in ecpg that could possibly do with more analysis.
      
      AFAICT, none of these changes are more than cosmetic, except for the four
      occurrences in fe-secure-openssl.c, which are in fact buggy: an overlength
      source leads to a non-null-terminated destination buffer and ensuing
      misbehavior.  These don't seem like security issues, first because no stack
      clobber is possible and second because if your values of sslcert etc are
      coming from untrusted sources then you've got problems way worse than this.
      Still, it's undesirable to have unpredictable behavior for overlength
      inputs, so back-patch those four changes to all active branches.
      586dd5d6
  2. 24 1月, 2015 3 次提交
  3. 23 1月, 2015 6 次提交
    • T
      Prevent duplicate escape-string warnings when using pg_stat_statements. · eb213acf
      Tom Lane 提交于
      contrib/pg_stat_statements will sometimes run the core lexer a second time
      on submitted statements.  Formerly, if you had standard_conforming_strings
      turned off, this led to sometimes getting two copies of any warnings
      enabled by escape_string_warning.  While this is probably no longer a big
      deal in the field, it's a pain for regression testing.
      
      To fix, change the lexer so it doesn't consult the escape_string_warning
      GUC variable directly, but looks at a copy in the core_yy_extra_type state
      struct.  Then, pg_stat_statements can change that copy to disable warnings
      while it's redoing the lexing.
      
      It seemed like a good idea to make this happen for all three of the GUCs
      consulted by the lexer, not just escape_string_warning.  There's not an
      immediate use-case for callers to adjust the other two AFAIK, but making
      it possible is easy enough and seems like good future-proofing.
      
      Arguably this is a bug fix, but there doesn't seem to be enough interest to
      justify a back-patch.  We'd not be able to back-patch exactly as-is anyway,
      for fear of breaking ABI compatibility of the struct.  (We could perhaps
      back-patch the addition of only escape_string_warning by adding it at the
      end of the struct, where there's currently alignment padding space.)
      eb213acf
    • P
      Fix whitespace · f5f2c2de
      Peter Eisentraut 提交于
      f5f2c2de
    • A
      Tweak BRIN minmax operator class · 972bf7d6
      Alvaro Herrera 提交于
      In the union support proc, we were not checking the hasnulls flag of
      value A early enough, so it could be skipped if the "allnulls" flag in
      value B is set.  Also, a check on the allnulls flag of value "B" was
      redundant, so remove it.
      
      Also change inet_minmax_ops to not be the default opclass for type inet,
      as a future inclusion operator class would be more useful and it's
      pretty difficult to change default opclass for a datatype later on.
      (There is no catversion bump for this catalog change; this shouldn't be
      a problem.)
      
      Extracted from a larger patch to add an "inclusion" operator class.
      
      Author: Emre Hasegeli
      972bf7d6
    • R
      Repair brain fade in commit b181a919. · d060e07f
      Robert Haas 提交于
      The split between which things need to happen in the C-locale case and
      which needed to happen in the locale-aware case was a few bricks short
      of a load.  Try to fix that.
      d060e07f
    • B
      adjust ACL owners for REASSIGN and ALTER OWNER TO · 59367fdf
      Bruce Momjian 提交于
      When REASSIGN and ALTER OWNER TO are used, both the object owner and ACL
      list should be changed from the old owner to the new owner. This patch
      fixes types, foreign data wrappers, and foreign servers to change their
      ACL list properly;  they already changed owners properly.
      
      BACKWARD INCOMPATIBILITY?
      
      Report by Alexey Bashtanov
      59367fdf
    • R
      More fixes for abbreviated keys infrastructure. · b181a919
      Robert Haas 提交于
      First, when LC_COLLATE = C, bttext_abbrev_convert should use memcpy()
      rather than strxfrm() to construct the abbreviated key, because the
      authoritative comparator uses memcpy().  If we do anything else here,
      we might get inconsistent answers, and the buildfarm says this risk
      is not theoretical.  It should be faster this way, too.
      
      Second, while I'm looking at bttext_abbrev_convert, convert a needless
      use of goto into the loop it's trying to implement into an actual
      loop.
      
      Both of the above problems date to the original commit of abbreviated
      keys, commit 4ea51cdf.
      
      Third, fix a bogus assignment to tss->locale before tss is set up.
      That's a new goof in commit b529b65d.
      b181a919
  4. 22 1月, 2015 1 次提交
    • R
      Heavily refactor btsortsupport_worker. · b529b65d
      Robert Haas 提交于
      Prior to commit 4ea51cdf, this function
      only had one job, which was to decide whether we could avoid trampolining
      through the fmgr layer when performing sort comparisons.  As of that
      commit, it has a second job, which is to decide whether we can use
      abbreviated keys.  Unfortunately, those two tasks are somewhat intertwined
      in the existing coding, which is likely why neither Peter Geoghegan nor
      I noticed prior to commit that this calls pg_newlocale_from_collation() in
      cases where it didn't previously.  The buildfarm noticed, though.
      
      To fix, rewrite the logic so that the decision as to which comparator to
      use is more cleanly separated from the decision about abbreviation.
      b529b65d
  5. 21 1月, 2015 1 次提交
    • R
      Disable abbreviated keys on Windows. · 1be4eb1b
      Robert Haas 提交于
      Most of the Windows buildfarm members (bowerbird, hamerkop, currawong,
      jacana, brolga) are unhappy with yesterday's abbreviated keys patch,
      although there are some (narwhal, frogmouth) that seem OK with it.
      Since there's no obvious pattern to explain why some are working and
      others are failing, just disable this across-the-board on Windows for
      now.  This is a bit unfortunate since the optimization will be a big
      win in some cases, but we can't leave the buildfarm broken.
      1be4eb1b
  6. 20 1月, 2015 4 次提交
    • T
      Adjust "pgstat wait timeout" message to be a translatable LOG message. · 75b48e1f
      Tom Lane 提交于
      Per discussion, change the log level of this message to be LOG not WARNING.
      The main point of this change is to avoid causing buildfarm run failures
      when the stats collector is exceptionally slow to respond, which it not
      infrequently is on some of the smaller/slower buildfarm members.
      
      This change does lose notice to an interactive user when his stats query
      is looking at out-of-date stats, but the majority opinion (not necessarily
      that of yours truly) is that WARNING messages would probably not get
      noticed anyway on heavily loaded production systems.  A LOG message at
      least ensures that the problem is recorded somewhere where bulk auditing
      for the issue is possible.
      
      Also, instead of an untranslated "pgstat wait timeout" message, provide
      a translatable and hopefully more understandable message "using stale
      statistics instead of current ones because stats collector is not
      responding".  The original text was written hastily under the assumption
      that it would never really happen in practice, which we now know to be
      unduly optimistic.
      
      Back-patch to all active branches, since we've seen the buildfarm issue
      in all branches.
      75b48e1f
    • A
      Fix various shortcomings of the new PrivateRefCount infrastructure. · 2d115e47
      Andres Freund 提交于
      As noted by Tom Lane the improvements in 4b4b680c had the problem
      that in some situations we searched, entered and modified entries in
      the private refcount hash while holding a spinlock. I had tried to
      keep the logic entirely local to PinBuffer_Locked(), but that's not
      really possible given it's called with a spinlock held...
      
      Besides being disadvantageous from a performance point of view, this
      also has problems with error handling safety. If we failed inserting
      an entry into the hashtable due to an out of memory error, we'd error
      out with a held spinlock. Not good.
      
      Change the way private refcounts are manipulated: Before a buffer can
      be tracked an entry has to be reserved using
      ReservePrivateRefCountEntry(); then, if a entry is not found using
      GetPrivateRefCountEntry(), it can be entered with
      NewPrivateRefCountEntry().
      
      Also take advantage of the fact that PinBuffer_Locked() currently is
      never called for buffers that already have been pinned by the current
      backend and don't search the private refcount entries for preexisting
      local pins. That results in a small, but measurable, performance
      improvement.
      
      Additionally make ReleaseBuffer() always call UnpinBuffer() for shared
      buffers. That avoids duplicating work in an eventual UnpinBuffer()
      call that already has been done in ReleaseBuffer() and also saves some
      code.
      
      Per discussion with Tom Lane.
      
      Discussion: 15028.1418772313@sss.pgh.pa.us
      2d115e47
    • R
      Use abbreviated keys for faster sorting of text datums. · 4ea51cdf
      Robert Haas 提交于
      This commit extends the SortSupport infrastructure to allow operator
      classes the option to provide abbreviated representations of Datums;
      in the case of text, we abbreviate by taking the first few characters
      of the strxfrm() blob.  If the abbreviated comparison is insufficent
      to resolve the comparison, we fall back on the normal comparator.
      This can be much faster than the old way of doing sorting if the
      first few bytes of the string are usually sufficient to resolve the
      comparison.
      
      There is the potential for a performance regression if all of the
      strings to be sorted are identical for the first 8+ characters and
      differ only in later positions; therefore, the SortSupport machinery
      now provides an infrastructure to abort the use of abbreviation if
      it appears that abbreviation is producing comparatively few distinct
      keys.  HyperLogLog, a streaming cardinality estimator, is included in
      this commit and used to make that determination for text.
      
      Peter Geoghegan, reviewed by me.
      4ea51cdf
    • R
      Typo fix. · 1605291b
      Robert Haas 提交于
      Etsuro Fujita
      1605291b
  7. 19 1月, 2015 2 次提交
    • R
      BRIN typo fix. · 9d54b932
      Robert Haas 提交于
      Amit Langote
      9d54b932
    • T
      Fix ancient thinko in default table rowcount estimation. · 75df6dc0
      Tom Lane 提交于
      The code used sizeof(ItemPointerData) where sizeof(ItemIdData) is correct,
      since we're trying to account for a tuple's line pointer.  Spotted by
      Tomonari Katsumata (bug #12584).
      
      Although this mistake is of very long standing, no back-patch, since it's
      a relatively harmless error and changing it would risk changing default
      planner behavior in stable branches.  (I don't see any change in regression
      test outputs here, but the buildfarm may think differently.)
      75df6dc0
  8. 17 1月, 2015 5 次提交
    • A
      Replace walsender's latch with the general shared latch. · ff44fba4
      Andres Freund 提交于
      Relying on the normal shared latch simplifies interrupt/signal
      handling because we can rely on all signal handlers setting the proc
      latch. That in turn allows us to avoid the use of
      ImmediateInterruptOK, which arguably isn't correct because
      WaitLatchOrSocket isn't declared to be immediately interruptible.
      
      Also change sections that wait on the walsender's latch to notice
      interrupts quicker/more reliably and make them more consistent with
      each other.
      
      This is part of a larger "get rid of ImmediateInterruptOK" series.
      
      Discussion: 20150115020335.GZ5245@awork2.anarazel.de
      ff44fba4
    • T
      Show sort ordering options in EXPLAIN output. · 20af53d7
      Tom Lane 提交于
      Up to now, EXPLAIN has contented itself with printing the sort expressions
      in a Sort or Merge Append plan node.  This patch improves that by
      annotating the sort keys with COLLATE, DESC, USING, and/or NULLS FIRST/LAST
      whenever nondefault sort ordering options are used.  The output is now a
      reasonably close approximation of an ORDER BY clause equivalent to the
      plan's ordering.
      
      Marius Timmer, Lukas Kreft, and Arne Scheffer; reviewed by Mike Blackwell.
      Some additional hacking by me.
      20af53d7
    • H
      Advance backend's advertised xmin more aggressively. · 94028691
      Heikki Linnakangas 提交于
      Currently, a backend will reset it's PGXACT->xmin value when it doesn't
      have any registered snapshots left. That covered the common case that a
      transaction in read committed mode runs several queries, one after each
      other, as there would be no snapshots active between those queries.
      However, if you hold cursors across each of the query, we didn't get a
      chance to reset xmin.
      
      To make that better, keep all the registered snapshots in a pairing heap,
      ordered by xmin so that it's always quick to find the snapshot with the
      smallest xmin. That allows us to advance PGXACT->xmin whenever the oldest
      snapshot is deregistered, even if there are others still active.
      
      Per discussion originally started by Jeff Davis back in 2009 and more
      recently by Robert Haas.
      94028691
    • T
      Improve new caching logic in tbm_add_tuples(). · 779fdcde
      Tom Lane 提交于
      For no significant extra complexity, we can cache knowledge that the
      target page is lossy, and save a hash_search per iteration in that
      case as well.  This probably makes little difference, since the extra
      rechecks that must occur when pages are lossy are way more expensive
      than anything we can save here ... but we might as well do it if we're
      going to cache anything.
      779fdcde
    • A
      Make tbm_add_tuples more efficient by caching the last acccessed page. · f5ae3ba4
      Andres Freund 提交于
      When adding a large number of tuples to a TID bitmap using
      tbm_add_tuples() sometimes a lot of time was spent looking up a page's
      entry in the bitmap's internal hashtable.
      
      Improve efficiency by caching the last accessed page, while iterating
      over the passed in tuples, hoping consecutive tuples will often be on
      the same page.  In many cases that's a good bet, and in the rest the
      added overhead isn't big.
      
      Discussion: 54479A85.8060309@sigaev.ru
      
      Author: Teodor Sigaev
      Reviewed-By: David Rowley
      f5ae3ba4
  9. 16 1月, 2015 4 次提交
    • T
      Fix use-of-already-freed-memory problem in EvalPlanQual processing. · c480cb9d
      Tom Lane 提交于
      Up to now, the "child" executor state trees generated for EvalPlanQual
      rechecks have simply shared the ResultRelInfo arrays used for the original
      execution tree.  However, this leads to dangling-pointer problems, because
      ExecInitModifyTable() is all too willing to scribble on some fields of the
      ResultRelInfo(s) even when it's being run in one of those child trees.
      This trashes those fields from the perspective of the parent tree, because
      even if the generated subtree is logically identical to what was in use in
      the parent, it's in a memory context that will go away when we're done
      with the child state tree.
      
      We do however want to share information in the direction from the parent
      down to the children; in particular, fields such as es_instrument *must*
      be shared or we'll lose the stats arising from execution of the children.
      So the simplest fix is to make a copy of the parent's ResultRelInfo array,
      but not copy any fields back at end of child execution.
      
      Per report from Manuel Kniep.  The added isolation test is based on his
      example.  In an unpatched memory-clobber-enabled build it will reliably
      fail with "ctid is NULL" errors in all branches back to 9.1, as a
      consequence of junkfilter->jf_junkAttNo being overwritten with $7f7f.
      This test cannot be run as-is before that for lack of WITH syntax; but
      I have no doubt that some variant of this problem can arise in older
      branches, so apply the code change all the way back.
      c480cb9d
    • H
      Fix thinko in re-setting wal_log_hints flag from a parameter-change record. · 49b04188
      Heikki Linnakangas 提交于
      The flag is supposed to be copied from the record. Same issue with
      track_commit_timestamps, but that's master-only.
      
      Report and fix by Petr Jalinek. Backpatch to 9.4, where wal_log_hints was
      added.
      49b04188
    • T
      Rearrange explain.c's API so callers need not embed sizeof(ExplainState). · 8e166e16
      Tom Lane 提交于
      The folly of the previous arrangement was just demonstrated: there's no
      convenient way to add fields to ExplainState without breaking ABI, even
      if callers have no need to touch those fields.  Since we might well need
      to do that again someday in back branches, let's change things so that
      only explain.c has to have sizeof(ExplainState) compiled into it.  This
      costs one extra palloc() per EXPLAIN operation, which is surely pretty
      negligible.
      8e166e16
    • T
      Improve performance of EXPLAIN with large range tables. · a5cd70dc
      Tom Lane 提交于
      As of 9.3, ruleutils.c goes to some lengths to ensure that table and column
      aliases used in its output are unique.  Of course this takes more time than
      was required before, which in itself isn't fatal.  However, EXPLAIN was set
      up so that recalculation of the unique aliases was repeated for each
      subexpression printed in a plan.  That results in O(N^2) time and memory
      consumption for large plan trees, which did not happen in older branches.
      
      Fortunately, the expensive work is the same across a whole plan tree,
      so there is no need to repeat it; we can do most of the initialization
      just once per query and re-use it for each subexpression.  This buys
      back most (not all) of the performance loss since 9.2.
      
      We need an extra ExplainState field to hold the precalculated deparse
      context.  That's no problem in HEAD, but in the back branches, expanding
      sizeof(ExplainState) seems risky because third-party extensions might
      have local variables of that struct type.  So, in 9.4 and 9.3, introduce
      an auxiliary struct to keep sizeof(ExplainState) the same.  We should
      refactor the APIs to avoid such local variables in future, but that's
      material for a separate HEAD-only commit.
      
      Per gripe from Alexey Bashtanov.  Back-patch to 9.3 where the issue
      was introduced.
      a5cd70dc
  10. 15 1月, 2015 1 次提交
    • A
      Add a default local latch for use in signal handlers. · 59f71a0d
      Andres Freund 提交于
      To do so, move InitializeLatchSupport() into the new common process
      initialization functions, and add a new global variable MyLatch.
      
      MyLatch is usable as soon InitPostmasterChild() has been called
      (i.e. very early during startup). Initially it points to a process
      local latch that exists in all processes. InitProcess/InitAuxiliaryProcess
      then replaces that local latch with PGPROC->procLatch. During shutdown
      the reverse happens.
      
      This is primarily advantageous for two reasons: For one it simplifies
      dealing with the shared process latch, especially in signal handlers,
      because instead of having to check for MyProc, MyLatch can be used
      unconditionally. For another, a later patch that makes FEs/BE
      communication use latches, now can rely on the existence of a latch,
      even before having gone through InitProcess.
      
      Discussion: 20140927191243.GD5423@alap3.anarazel.de
      59f71a0d
  11. 14 1月, 2015 3 次提交
    • A
      Remove some dead IsUnderPostmaster code from bootstrap.c. · 0139dea8
      Andres Freund 提交于
      Since commit 626eb021 has introduced the auxiliary process
      infrastructure, bootstrap_signals() was never used when forked from
      postmaster.
      
      Remove the IsUnderPostmaster specific code, and add a appropriate
      assertion.
      0139dea8
    • A
      Commonalize process startup code. · 31c45316
      Andres Freund 提交于
      Move common code, that was duplicated in every postmaster child/every
      standalone process, into two functions in miscinit.c.  Not only does
      that already result in a fair amount of net code reduction but it also
      makes it much easier to remove more duplication in the future. The
      prime motivation wasn't code deduplication though, but easier addition
      of new common code.
      31c45316
    • A
      Make logging_collector=on work with non-windows EXEC_BACKEND again. · 2be82dcf
      Andres Freund 提交于
      Commit b94ce6e8 reordered postmaster's startup sequence so that the
      tempfile directory is only cleaned up after all the necessary state
      for pg_ctl is collected.  Unfortunately the chosen location is after
      the syslogger has been started; which normally is fine, except for
      !WIN32 EXEC_BACKEND builds, which pass information to children via
      files in the temp directory.
      
      Move the call to RemovePgTempFiles() to just before the syslogger has
      started. That's the first child we fork.
      
      Luckily EXEC_BACKEND is pretty much only used by endusers on windows,
      which has a separate method to pass information to children. That
      means the real world impact of this bug is very small.
      
      Discussion: 20150113182344.GF12272@alap3.anarazel.de
      
      Backpatch to 9.1, just as the previous commit was.
      2be82dcf
  12. 13 1月, 2015 7 次提交
    • H
      Spell the X072 feature correctly, was missing "with". · e922a130
      Heikki Linnakangas 提交于
      Also use lower-case for a few more features, to be consistent with the
      others and with the SQL spec.
      e922a130
    • A
      Add barriers to the latch code. · 14e8803f
      Andres Freund 提交于
      Since their introduction latches have required barriers in SetLatch
      and ResetLatch - but when they were introduced there wasn't any
      barrier abstraction. Instead latches were documented to rely on the
      callsites to provide barrier semantics.
      
      Now that the barrier support looks halfway complete, add the necessary
      barriers to both latch implementations.
      
      Also remove a now superflous lock acquisition from syncrep.c and a
      superflous (and insufficient) barrier from freelist.c. There might be
      other cases that can now be simplified, but those are the only ones
      I've seen on a quick scan.
      
      We might want to backpatch this at some later point, but right now the
      barrier infrastructure in the backbranches isn't totally on par with
      master.
      
      Discussion: 20150112154026.GB2092@awork2.anarazel.de
      14e8803f
    • A
      Allow latches to wait for socket writability without waiting for readability. · 4bad60e3
      Andres Freund 提交于
      So far WaitLatchOrSocket() required to pass in WL_SOCKET_READABLE as
      that solely was used to indicate error conditions, like EOF. Waiting
      for WL_SOCKET_WRITEABLE would have meant to busy wait upon socket
      errors.
      
      Adjust the API to signal errors by returning the socket as readable,
      writable or both, depending on WL_SOCKET_READABLE/WL_SOCKET_WRITEABLE
      being specified.  It would arguably be nicer to return WL_SOCKET_ERROR
      but that's not possible on platforms and would probably also result in
      more complex callsites.
      
      This previously had explicitly been forbidden in e42a21b9, as
      there was no strong use case at that point. We now are looking into
      making FE/BE communication use latches, so changing this makes sense.
      
      There also are some portability concerns because there cases of older
      platforms where select(2) is known to, in violation of POSIX, not
      return a socket as writable after the peer has closed it.  So far the
      platforms where that's the case provide a working poll(2). If we find
      one where that's not the case, we'll need to add a workaround for that
      platform.
      
      Discussion: 20140927191243.GD5423@alap3.anarazel.de
      Reviewed-By: Heikki Linnakangas, Noah Misch
      4bad60e3
    • A
      Tweak heapam's rmgr desc output slightly · d126e1e9
      Alvaro Herrera 提交于
      Some spaces were missing, and putting the affected tuple offset first in
      the lock cases instead of the locking data makes more sense.
      
      No backpatch since this is cosmetic and surrounding code has changed.
      d126e1e9
    • A
      Fix get_object_address argument type for extension statement · 5c5ffee8
      Alvaro Herrera 提交于
      Commit 3f88672a neglected to update the AlterExtensionContentsStmt
      production in the grammar to use TypeName to represent types when
      passing objects to get_object_address.
      
      Reported as a pg_upgrade failure by Jeff Janes.
      5c5ffee8
    • T
      Use correct text domain for errcontext() appearing within ereport(). · 1f9bf05e
      Tom Lane 提交于
      The mechanism added in commit dbdf9679
      for associating the correct translation domain with errcontext strings
      potentially fails in cases where errcontext() is used within an ereport()
      macro.  Such usage was not originally envisioned for errcontext(), but we
      do have a few places that do it.  In this situation, the intended comma
      expression becomes just a couple of arguments to errfinish(), which the
      compiler might choose to evaluate right-to-left.
      
      Fortunately, in such cases the textdomain for the errcontext string must
      be the same as for the surrounding ereport.  So we can fix this by letting
      errstart initialize context_domain along with domain; then it will have
      the correct value no matter which order the calls occur in.  (Note that
      error stack callback functions are not invoked until errfinish, so normal
      usage of errcontext won't affect what happens for errcontext calls within
      the ereport macro.)
      
      In passing, make sure that errcontext calls within the main backend set
      context_domain to something non-NULL.  This isn't a live bug because
      NULL would select the current textdomain() setting which should be the
      right thing anyway --- but it seems better to handle this completely
      consistently with the regular domain field.
      
      Per report from Dmitry Voronin.  Backpatch to 9.3; before that, there
      wasn't any attempt to ensure that errcontext strings were translated
      in an appropriate domain.
      1f9bf05e
    • S
      Skip dead backends in MinimumActiveBackends · 1bf4a84d
      Stephen Frost 提交于
      Back in ed0b409d, PGPROC was split and moved to static variables in
      procarray.c, with procs in ProcArrayStruct replaced by an array of
      integers representing process numbers (pgprocnos), with -1 indicating a
      dead process which has yet to be removed.  Access to procArray is
      generally done under ProcArrayLock and therefore most code does not have
      to concern itself with -1 entries.
      
      However, MinimumActiveBackends intentionally does not take
      ProcArrayLock, which means it has to be extra careful when accessing
      procArray.  Prior to ed0b409d, this was handled by checking for a NULL
      in the pointer array, but that check was no longer valid after the
      split.  Coverity pointed out that the check could never happen and so
      it was removed in 5592ebac.  That didn't make anything worse, but it
      didn't fix the issue either.
      
      The correct fix is to check for pgprocno == -1 and skip over that entry
      if it is encountered.
      
      Back-patch to 9.2, since there can be attempts to access the arrays
      prior to their start otherwise.  Note that the changes prior to 9.4 will
      look a bit different due to the change in 5592ebac.
      
      Note that MinimumActiveBackends only returns a bool for heuristic
      purposes and any pre-array accesses are strictly read-only and so there
      is no security implication and the lack of fields complaints indicates
      it's very unlikely to run into issues due to this.
      
      Pointed out by Noah.
      1bf4a84d
  13. 11 1月, 2015 1 次提交
    • A
      Provide a generic fallback for pg_compiler_barrier using an extern function. · de6429a8
      Andres Freund 提交于
      If the compiler/arch combination does not provide compiler barriers,
      provide a fallback. That fallback simply consists out of a function
      call into a externally defined function.  That should guarantee
      compiler barrierer semantics except for compilers that do inter
      translation unit/global optimization - those better provide an actual
      compiler barrier.
      
      Hopefully this fixes Tom's report of linker failures due to
      pg_compiler_barrier_impl not being provided.
      
      I'm not backpatching this commit as it builds on the new atomics
      infrastructure. If we decide an equivalent fix needs to be
      backpatched, I'll do so in a separate commit.
      
      Discussion: 27746.1420930690@sss.pgh.pa.us
      
      Per report from Tom Lane.
      de6429a8
  14. 10 1月, 2015 1 次提交