• Heikki Linnakangas's avatar
    Fix locking while setting flags in MySerializableXact. · cb2d158c
    Heikki Linnakangas authored
    Even if a flag is modified only by the backend owning the transaction, it's
    not safe to modify it without a lock. Another backend might be setting or
    clearing a different flag in the flags field concurrently, and that
    operation might be lost because setting or clearing a bit in a word is not
    atomic.
    
    Make did-write flag a simple backend-private boolean variable, because it
    was only set or tested in the owning backend (except when committing a
    prepared transaction, but it's not worthwhile to optimize for the case of a
    read-only prepared transaction). This also eliminates the need to add
    locking where that flag is set.
    
    Also, set the did-write flag when doing DDL operations like DROP TABLE or
    TRUNCATE -- that was missed earlier.
    cb2d158c
predicate.c 148 KB