1. 25 May, 2014 1 commit
    • Andres Freund's avatar
      Don't allocate memory inside an Assert() iff in a critical section. · 9fa93530
      Andres Freund authored
      HeapTupleHeaderGetCmax() asserts that it is only used if the tuple has
      been updated by the current transaction. That check is correct and
      sensible but requires allocating memory if xmax is a multixact. When
      wal_level is set to logical cmax needs to be included in a wal record
      , generated inside a critical section, which can trigger the assertion
      added in 4a170ee9.
      
      Reported-By: Steve Singer
      9fa93530
  2. 24 May, 2014 1 commit
    • Andres Freund's avatar
      Silence a couple of spurious valgrind warnings in inval.c. · 0564bbe7
      Andres Freund authored
      Define padding bytes in SharedInvalidationMessage structs to be
      defined. Otherwise the sinvaladt.c ringbuffer, which is accessed by
      multiple processes, will cause spurious valgrind warnings about
      undefined memory being used. That's because valgrind remembers the
      undefined bytes from the last local process's store, not realizing
      that another process has written since, filling the previously
      uninitialized bytes.
      0564bbe7
  3. 23 May, 2014 2 commits
  4. 22 May, 2014 4 commits
  5. 21 May, 2014 2 commits
  6. 20 May, 2014 2 commits
    • Bruce Momjian's avatar
      doc: 9.4 release notes update for pg_bench line limit item · 6a61308f
      Bruce Momjian authored
      Report by David Johnston
      6a61308f
    • Tom Lane's avatar
      Prevent auto_explain from changing the output of a user's EXPLAIN. · e416830a
      Tom Lane authored
      Commit af7914c6, which introduced the
      EXPLAIN (TIMING) option, for some reason coded explain.c to look at
      planstate->instrument->need_timer rather than es->timing to decide
      whether to print timing info.  However, the former flag might get set
      as a result of contrib/auto_explain wanting timing information.  We
      certainly don't want activation of auto_explain to change user-visible
      statement behavior, so fix that.
      
      Also fix an independent bug introduced in the same patch: in the code
      path for a never-executed node with a machine-friendly output format,
      if timing was selected, it would fail to print the Actual Rows and Actual
      Loops items.
      
      Per bug #10404 from Tomonari Katsumata.  Back-patch to 9.2 where the
      faulty code was introduced.
      e416830a
  7. 19 May, 2014 9 commits
  8. 18 May, 2014 2 commits
    • Tom Lane's avatar
      Ooops, I broke initdb with that last patch. · 0c19aaba
      Tom Lane authored
      That's what I get for not fully retesting the final version of the patch.
      The replace_allowed cross-check needs an additional special case for
      bootstrapping.
      0c19aaba
    • Tom Lane's avatar
      Fix two ancient memory-leak bugs in relcache.c. · 078b2ed2
      Tom Lane authored
      RelationCacheInsert() ignored the possibility that hash_search(HASH_ENTER)
      might find a hashtable entry already present for the same OID.  However,
      that can in fact occur during recursive relcache load scenarios.  When it
      did happen, we overwrote the pointer to the pre-existing Relation, causing
      a session-lifespan leakage of that entire structure.  As far as is known,
      the pre-existing Relation would always have reference count zero by the
      time we arrive back at the outer insertion, so add code that deletes the
      pre-existing Relation if so.  If by some chance its refcount is positive,
      elog a WARNING and allow the pre-existing Relation to be leaked as before.
      
      Also, AttrDefaultFetch() was sloppy about leaking the cstring form of the
      pg_attrdef.adbin value it's copying into the relcache structure.  This is
      only a query-lifespan leakage, and normally not very significant, but it
      adds up during CLOBBER_CACHE testing.
      
      These bugs are of very ancient vintage, but I'll refrain from back-patching
      since there's no evidence that these leaks amount to anything in ordinary
      usage.
      078b2ed2
  9. 17 May, 2014 4 commits
    • Tom Lane's avatar
      Make fallback implementation of pg_memory_barrier() work. · 44cd47c1
      Tom Lane authored
      The fallback implementation involves acquiring and releasing a spinlock
      variable that is otherwise unreferenced --- not even to the extent of
      initializing it.  This accidentally fails to fail on platforms where
      spinlocks should be initialized to zeroes, but elsewhere it results in
      a "stuck spinlock" failure during startup.
      
      I griped about this last July, and put in a hack that worked for gcc
      on HPPA, but didn't get around to fixing the general case.  Per the
      discussion back then, the best thing to do seems to be to initialize
      dummy_spinlock in main.c.
      44cd47c1
    • Tom Lane's avatar
      Fix a bunch of functions that were declared static then defined not-static. · c1907f0c
      Tom Lane authored
      Per testing with a compiler that whines about this.
      c1907f0c
    • Tom Lane's avatar
      Fix unaligned accesses in DecodeUpdate(). · 6c42b2b1
      Tom Lane authored
      The xl_heap_header_len structures in an XLOG_HEAP_UPDATE record aren't
      necessarily aligned adequately.  The regular replay function for these
      records is aware of that, but decode.c didn't get the memo.  I'm not
      sure why the buildfarm failed to catch this; the test_decoding test
      certainly blows up real good on my old HPPA box.
      
      Also, I'm pretty sure that the address arithmetic was wrong for the
      case of XLOG_HEAP_CONTAINS_OLD and not XLOG_HEAP_CONTAINS_NEW_TUPLE,
      though this apparently can't happen when logical decoding is active.
      6c42b2b1
    • Heikki Linnakangas's avatar
      Update README, we don't do post-recovery cleanup actions anymore. · a3655dd4
      Heikki Linnakangas authored
      transam/README explained how B-tree incomplete splits were tracked and
      fixed after recovery, as an example of handling complex actions that need
      multiple WAL records, but that's not how it works anymore. Explain the new
      paradigm.
      a3655dd4
  10. 16 May, 2014 9 commits
    • Tom Lane's avatar
      Make sure chr(int) can't create invalid UTF8 sequences. · 7894ac50
      Tom Lane authored
      Several years ago we changed chr(int) so that if the database encoding is
      UTF8, it would interpret its argument as a Unicode code point and expand it
      into the appropriate multibyte sequence.  However, we weren't sufficiently
      careful about checking validity of the input.  According to RFC3629, UTF8
      disallows code points above U+10FFFF (note that the predecessor standard
      RFC2279 was more liberal).  Also, both versions of the UTF8 spec agree
      that Unicode surrogate-pair codes should never appear in UTF8.  Because
      our encoding validity checks follow RFC3629, our failure to enforce these
      restrictions in chr() means it could be used to produce text strings that
      will be rejected when the database is dumped and reloaded.  To ensure
      consistency with the input functions, let's actually apply
      pg_utf8_islegal() to the proposed output of chr().
      
      Per discussion, this seems like too much of a behavioral change to
      back-patch, but it's not too late to squeeze it into 9.4.
      7894ac50
    • Tom Lane's avatar
      Suppress some more valgrind whining about btree_gist. · af215d81
      Tom Lane authored
      A couple of functions didn't bother to zero out pad bytes in datums that
      would ultimately go to disk.  Harmless, but valgrind doesn't know that.
      af215d81
    • Tom Lane's avatar
      Fix a second cause of undersized pallocs for btree_gist indexes on macaddr. · 39586bc1
      Tom Lane authored
      gbt_macad_union also allocated 12-byte structs where we really need 16.
      
      Per report from Andres Freund.  No back-patch since there's no current
      risk of a real problem.
      39586bc1
    • Tom Lane's avatar
      Fix valgrind warning for btree_gist indexes on macaddr. · 82bbb60c
      Tom Lane authored
      The macaddr opclass stores two macaddr structs (each of size 6) in an
      index column that's declared as being of type gbtreekey16, ie 16 bytes.
      In the original coding this led to passing a palloc'd value of size 12
      to the index insertion code, so that data would be fetched past the
      end of the allocated value during index tuple construction.  This makes
      valgrind unhappy.  In principle it could result in a SIGSEGV, though
      with the current implementation of palloc there's no risk since
      the 12-byte request size would be rounded up to 16 bytes anyway.
      
      To fix, add a field to struct gbtree_ninfo showing the declared size of
      the index datums, and use that in the palloc requests; and use palloc0
      to be sure that any wasted bytes are cleanly initialized.
      
      Per report from Andres Freund.  No back-patch since there's no current
      risk of a real problem.
      82bbb60c
    • Heikki Linnakangas's avatar
      d900e192
    • Heikki Linnakangas's avatar
      Fix test_decoding test case's check that slot has been dropped. · afd0fcbc
      Heikki Linnakangas authored
      pg_stat_replication shows connected replication clients. The ddl test case
      never has any replication clients connected, so querying pg_stat_replication
      is pointless. To check that a slot has been dropped correctly, query
      pg_replication_slots instead.
      
      Andres Freund
      afd0fcbc
    • Heikki Linnakangas's avatar
      Fix thinko in logical decoding of commit-prepared records. · 03e2b101
      Heikki Linnakangas authored
      The decoding of prepared transaction commits accidentally used the XID of
      the transaction performing the COMMIT PREPARED, not the XID of the prepared
      transaction. Before bb38fb0d that lead to those transactions not being
      decoded, afterwards to a assertion failure.
      03e2b101
    • Heikki Linnakangas's avatar
      Open output file before sleeping in pg_recvlogical. · e7873b74
      Heikki Linnakangas authored
      Let's complain about e.g an invalid path or permission problem sooner rather
      than later. Before this patch, we would only try to open the output file
      after receiving the first decoded message from the server.
      e7873b74
    • Heikki Linnakangas's avatar
      Initialize tsId and dbId fields in WAL record of COMMIT PREPARED. · 07a4a93a
      Heikki Linnakangas authored
      Commit dd428c79 added dbId and tsId to the xl_xact_commit struct but missed
      that prepared transaction commits reuse that struct. Fix that.
      
      Because those fields were left unitialized, replaying a commit prepared WAL
      record in a hot standby node would fail to remove the relcache init file.
      That can lead to "could not open file" errors on the standby. Relcache init
      file only needs to be removed when a system table/index is rewritten in the
      transaction using two phase commit, so that should be rare in practice. In
      HEAD, the incorrect dbId/tsId values are also used for filtering in logical
      replication code, causing the transaction to always be filtered out.
      
      Analysis and fix by Andres Freund. Backpatch to 9.0 where hot standby was
      introduced.
      07a4a93a
  11. 15 May, 2014 4 commits
    • Tom Lane's avatar
      Fix unportable setvbuf() usage in initdb. · f62d4178
      Tom Lane authored
      In yesterday's commit 2dc4f011, I tried
      to force buffering of stdout/stderr in initdb to be what it is by
      default when the program is run interactively on Unix (since that's how
      most manual testing is done).  This tripped over the fact that Windows
      doesn't support _IOLBF mode.  We dealt with that a long time ago in
      syslogger.c by falling back to unbuffered mode on Windows.  Export that
      solution in port.h and use it in initdb.
      
      Back-patch to 8.4, like the previous commit.
      f62d4178
    • Peter Eisentraut's avatar
      Fix whitespace · 2f8e68bd
      Peter Eisentraut authored
      2f8e68bd
    • Heikki Linnakangas's avatar
      Fix a couple of bugs in pg_recvlogical output to stdout. · 00c26b6a
      Heikki Linnakangas authored
      Don't close stdout on SIGHUP. Also, when a SIGHUP is received, close the
      file immediately, rather than only after receiving some more data from
      the server. Rename a variable, to avoid mentally dealing with double
      negatives (not unsynced means synced).
      00c26b6a
    • Heikki Linnakangas's avatar
      Handle duplicate XIDs in txid_snapshot. · 8f9b9590
      Heikki Linnakangas authored
      The proc array can contain duplicate XIDs, when a transaction is just being
      prepared for two-phase commit. To cope, remove any duplicates in
      txid_current_snapshot(). Also ignore duplicates in the input functions, so
      that if e.g. you have an old pg_dump file that already contains duplicates,
      it will be accepted.
      
      Report and fix by Jan Wieck. Backpatch to all supported versions.
      8f9b9590