Thread

  1. JDBC access is broken in 7.3 beta

    Mats Lofkvist <mal@algonet.se> — 2002-11-13T12:28:13Z

    (I posted this on the bugs and jdbc newsgroups last week
    but have seen no response. Imho, this really needs to
    be fixed since the bug makes it impossible to use the
    driver in a multithreaded environment so I'm reposting
    to hackers and patches.)
    
          _
    Mats Lofkvist
    mal@algonet.se
    
    
    
    
    The optimization added in
    src/interfaces/jdbc/org/postgresql/core/Encoding.java
    version 1.7 breaks JDBC since it is not thread safe.
    
    The new method decodeUTF8() uses a static (i.e. class member)
    but is synchronized on the instance so it won't work with multiple
    instances used in parallel by multiple threads.
    (Quick and dirty patch below.)
    
    (The method also isn't using the 'length' parameter correctly,
    but since offset always seems to be zero, this bug doesn't show up.)
    
          _
    Mats Lofkvist
    mal@algonet.se
    
    
    *** org/postgresql/core/Encoding.java~  Sun Oct 20 04:55:50 2002
    --- org/postgresql/core/Encoding.java   Fri Nov  8 16:13:20 2002
    ***************
    *** 233,239 ****
             */
            private static final int pow2_6 = 64;           // 26
            private static final int pow2_12 = 4096;        // 212
    !       private static char[] cdata = new char[50];
      
            private synchronized String decodeUTF8(byte data[], int offset, int length) {
                    char[] l_cdata = cdata;
    --- 233,239 ----
             */
            private static final int pow2_6 = 64;           // 26
            private static final int pow2_12 = 4096;        // 212
    !       private char[] cdata = new char[50];
      
            private synchronized String decodeUTF8(byte data[], int offset, int length) {
                    char[] l_cdata = cdata;
    
    
    
  2. Re: JDBC access is broken in 7.3 beta

    Barry Lind <blind@xythos.com> — 2002-11-14T10:56:43Z

    Mats,
    
    Patch applied.  (I also fixed the 'length' problem you reported as well).
    
    thanks,
    --Barry
    
    
    Mats Lofkvist wrote:
    > (I posted this on the bugs and jdbc newsgroups last week
    > but have seen no response. Imho, this really needs to
    > be fixed since the bug makes it impossible to use the
    > driver in a multithreaded environment so I'm reposting
    > to hackers and patches.)
    > 
    >       _
    > Mats Lofkvist
    > mal@algonet.se
    > 
    > 
    > 
    > 
    > The optimization added in
    > src/interfaces/jdbc/org/postgresql/core/Encoding.java
    > version 1.7 breaks JDBC since it is not thread safe.
    > 
    > The new method decodeUTF8() uses a static (i.e. class member)
    > but is synchronized on the instance so it won't work with multiple
    > instances used in parallel by multiple threads.
    > (Quick and dirty patch below.)
    > 
    > (The method also isn't using the 'length' parameter correctly,
    > but since offset always seems to be zero, this bug doesn't show up.)
    > 
    >       _
    > Mats Lofkvist
    > mal@algonet.se
    > 
    > 
    > *** org/postgresql/core/Encoding.java~  Sun Oct 20 04:55:50 2002
    > --- org/postgresql/core/Encoding.java   Fri Nov  8 16:13:20 2002
    > ***************
    > *** 233,239 ****
    >          */
    >         private static final int pow2_6 = 64;           // 26
    >         private static final int pow2_12 = 4096;        // 212
    > !       private static char[] cdata = new char[50];
    >   
    >         private synchronized String decodeUTF8(byte data[], int offset, int length) {
    >                 char[] l_cdata = cdata;
    > --- 233,239 ----
    >          */
    >         private static final int pow2_6 = 64;           // 26
    >         private static final int pow2_12 = 4096;        // 212
    > !       private char[] cdata = new char[50];
    >   
    >         private synchronized String decodeUTF8(byte data[], int offset, int length) {
    >                 char[] l_cdata = cdata;
    > 
    > 
    > ---------------------------(end of broadcast)---------------------------
    > TIP 4: Don't 'kill -9' the postmaster
    >