[Git][java-team/qpid-proton-j][upstream] New upstream version 0.34.1

Tony Mancill (@tmancill) gitlab at salsa.debian.org
Sun Nov 30 22:56:02 GMT 2025



Tony Mancill pushed to branch upstream at Debian Java Maintainers / qpid-proton-j


Commits:
ed90c7d6 by tony mancill at 2025-11-30T13:52:50-08:00
New upstream version 0.34.1
- - - - -


18 changed files:

- .github/workflows/build.yml
- − .travis.yml
- NOTICE
- README.md
- apache-qpid-proton-j/pom.xml
- apache-qpid-proton-j/src/main/assembly/NOTICE
- examples/engine/pom.xml
- examples/reactor/pom.xml
- pom.xml
- proton-j/pom.xml
- proton-j/src/main/java/org/apache/qpid/proton/engine/impl/DeliveryImpl.java
- proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
- proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportLink.java
- proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportSession.java
- proton-j/src/test/java/org/apache/qpid/proton/engine/impl/DeliveryImplTest.java
- proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java
- tests/performance-jmh/pom.xml
- tests/pom.xml


Changes:

=====================================
.github/workflows/build.yml
=====================================
@@ -11,8 +11,8 @@ jobs:
         java: [ 8, 11, 17 ]
 
     steps:
-      - uses: actions/checkout at v2
-      - uses: actions/cache at v2
+      - uses: actions/checkout at v3
+      - uses: actions/cache at v3
         with:
           path: ~/.m2/repository
           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
@@ -20,7 +20,7 @@ jobs:
             ${{ runner.os }}-maven-
 
       - name: Install JDK ${{ matrix.java }}
-        uses: actions/setup-java at v2
+        uses: actions/setup-java at v3
         with:
           java-version: ${{ matrix.java }}
           distribution: 'temurin'


=====================================
.travis.yml deleted
=====================================
@@ -1,12 +0,0 @@
-language: java
-matrix:
-  include:
-    - os: linux
-      jdk: openjdk8
-    - os: linux
-      jdk: openjdk11
-cache:
-  directories:
-  - $HOME/.m2
-before_cache:
-  - rm -rf $HOME/.m2/repository/org/apache/qpid/*


=====================================
NOTICE
=====================================
@@ -1,5 +1,5 @@
 Apache Qpid Proton-J
-Copyright 2012-2022 The Apache Software Foundation
+Copyright 2012-2023 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).


=====================================
README.md
=====================================
@@ -1,9 +1,5 @@
 # Apache Qpid Proton-J
 
-[![Linux Build Status](https://travis-ci.com/apache/qpid-proton-j.svg?branch=main)](https://travis-ci.com/github/apache/qpid-proton-j)
-[![Windows Build Status](https://ci.appveyor.com/api/projects/status/wh587qrxa3c22mh2/branch/main?svg=true)](https://ci.appveyor.com/project/ApacheSoftwareFoundation/qpid-proton-j/branch/main)
-
-
 [Qpid Proton-J](https://qpid.apache.org/proton) is a high-performance, lightweight messaging
 library. It can be used in the widest range of messaging applications, including brokers,
 clients libraries, routers, bridges, proxies, and more.


=====================================
apache-qpid-proton-j/pom.xml
=====================================
@@ -18,7 +18,7 @@
   <parent>
     <groupId>org.apache.qpid</groupId>
     <artifactId>proton-j-parent</artifactId>
-    <version>0.34.0</version>
+    <version>0.34.1</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>


=====================================
apache-qpid-proton-j/src/main/assembly/NOTICE
=====================================
@@ -1,5 +1,5 @@
 Apache Qpid Proton-J
-Copyright 2012-2022 The Apache Software Foundation
+Copyright 2012-2023 The Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).


=====================================
examples/engine/pom.xml
=====================================
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.apache.qpid</groupId>
     <artifactId>proton-j-parent</artifactId>
-    <version>0.34.0</version>
+    <version>0.34.1</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>


=====================================
examples/reactor/pom.xml
=====================================
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.apache.qpid</groupId>
     <artifactId>proton-j-parent</artifactId>
-    <version>0.34.0</version>
+    <version>0.34.1</version>
     <relativePath>../../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>


=====================================
pom.xml
=====================================
@@ -26,7 +26,7 @@
 
   <groupId>org.apache.qpid</groupId>
   <artifactId>proton-j-parent</artifactId>
-  <version>0.34.0</version>
+  <version>0.34.1</version>
   <packaging>pom</packaging>
 
   <name>Proton-J Parent</name>
@@ -49,7 +49,7 @@
     <!-- surefire forked jvm arguments -->
     <argLine>-Xmx2g -enableassertions ${jacoco-config}</argLine>
 
-    <project.build.outputTimestamp>2022-08-30T16:51:57Z</project.build.outputTimestamp>
+    <project.build.outputTimestamp>2023-03-02T17:09:36Z</project.build.outputTimestamp>
   </properties>
 
   <dependencyManagement>
@@ -183,6 +183,13 @@
             <pushChanges>true</pushChanges>
           </configuration>
         </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-javadoc-plugin</artifactId>
+          <configuration>
+            <noindex>true</noindex>
+          </configuration>
+        </plugin>
         <plugin>
           <groupId>org.jacoco</groupId>
           <artifactId>jacoco-maven-plugin</artifactId>
@@ -205,7 +212,7 @@
     <connection>scm:git:https://gitbox.apache.org/repos/asf/qpid-proton-j.git</connection>
     <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/qpid-proton-j.git</developerConnection>
     <url>https://gitbox.apache.org/repos/asf?p=qpid-proton-j.git</url>
-    <tag>0.34.0</tag>
+    <tag>0.34.1</tag>
   </scm>
   <issueManagement>
     <url>https://issues.apache.org/jira/browse/PROTON</url>


=====================================
proton-j/pom.xml
=====================================
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.apache.qpid</groupId>
     <artifactId>proton-j-parent</artifactId>
-    <version>0.34.0</version>
+    <version>0.34.1</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 


=====================================
proton-j/src/main/java/org/apache/qpid/proton/engine/impl/DeliveryImpl.java
=====================================
@@ -291,6 +291,12 @@ public class DeliveryImpl implements Delivery
 
     void addToTransportWorkList()
     {
+        TransportSession transportSession = getLink().getSession().getTransportSession();
+        if (transportSession != null && transportSession.endSent()) {
+            // Too late to action this work, dont add it to the transport work list.
+            return;
+        }
+
         getLink().getConnectionImpl().addTransportWork(this);
     }
 


=====================================
proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
=====================================
@@ -469,6 +469,7 @@ public class TransportImpl extends EndpointImpl
                         }
 
                         writeFrame(transportSession.getLocalChannel(), detach, null, null);
+                        transportLink.sentDetach();
                     }
 
                     endpoint.clearModified();
@@ -561,6 +562,11 @@ public class TransportImpl extends EndpointImpl
         SessionImpl session = snd.getSession();
         TransportSession tpSession = session.getTransportSession();
 
+        if (tpSession != null && tpSession.endSent()) {
+            // Too late to action this work, clear it.
+            return true;
+        }
+
         boolean wasDone = delivery.isDone();
 
         if(!delivery.isDone() &&
@@ -676,7 +682,7 @@ public class TransportImpl extends EndpointImpl
             }
         }
 
-        if(wasDone && delivery.getLocalState() != null)
+        if(wasDone && delivery.getLocalState() != null && tpSession.isLocalChannelSet())
         {
             TransportDelivery tpDelivery = delivery.getTransportDelivery();
             // Use cached object as holder of data for immediate write to the FrameWriter
@@ -694,6 +700,11 @@ public class TransportImpl extends EndpointImpl
             writeFrame(tpSession.getLocalChannel(), cachedDisposition, null, null);
         }
 
+        if(!wasDone && tpLink != null && tpLink.detachSent()) {
+            // Too late to action this work, clear it.
+            return true;
+        }
+
         return !delivery.isBuffered();
     }
 
@@ -703,6 +714,11 @@ public class TransportImpl extends EndpointImpl
         SessionImpl session = rcv.getSession();
         TransportSession tpSession = session.getTransportSession();
 
+        if (tpSession.endSent()) {
+            // Too late to action this work, clear it.
+            return true;
+        }
+
         if (tpSession.isLocalChannelSet())
         {
             boolean settled = delivery.isSettled();
@@ -1055,6 +1071,7 @@ public class TransportImpl extends EndpointImpl
                         }
 
                         writeFrame(channel, end, null, null);
+                        transportSession.sentEnd();
                     }
 
                     endpoint.clearModified();


=====================================
proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportLink.java
=====================================
@@ -37,6 +37,7 @@ class TransportLink<T extends LinkImpl>
     private UnsignedInteger _remoteLinkCredit;
     private boolean _detachReceived;
     private boolean _attachSent;
+    private boolean _detachSent;
 
     protected TransportLink(T link)
     {
@@ -226,4 +227,14 @@ class TransportLink<T extends LinkImpl>
     {
         _remoteDeliveryCount = remoteDeliveryCount;
     }
+
+    public boolean detachSent()
+    {
+        return _detachSent;
+    }
+
+    public void sentDetach()
+    {
+        _detachSent = true;
+    }
 }


=====================================
proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportSession.java
=====================================
@@ -70,6 +70,7 @@ class TransportSession
     private int _unsettledIncomingSize;
     private boolean _endReceived;
     private boolean _beginSent;
+    private boolean _endSent;
 
     TransportSession(TransportImpl transport, SessionImpl session)
     {
@@ -527,4 +528,14 @@ class TransportSession
     {
         _beginSent = true;
     }
+
+    public boolean endSent()
+    {
+        return _endSent;
+    }
+
+    public void sentEnd()
+    {
+        _endSent = true;
+    }
 }


=====================================
proton-j/src/test/java/org/apache/qpid/proton/engine/impl/DeliveryImplTest.java
=====================================
@@ -735,7 +735,9 @@ public class DeliveryImplTest
     private DeliveryImpl createSenderDelivery() {
         LinkImpl link = Mockito.mock(SenderImpl.class);
         ConnectionImpl connection = Mockito.mock(ConnectionImpl.class);
+        SessionImpl session = Mockito.mock(SessionImpl.class);
 
+        Mockito.when(link.getSession()).thenReturn(session);
         Mockito.when(link.getConnectionImpl()).thenReturn(connection);
 
         return new DeliveryImpl(null, link, null);


=====================================
proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java
=====================================
@@ -4895,4 +4895,304 @@ public class TransportImplTest
 
         assertNoEvents(collector);
     }
+
+    /**
+     * Verify that the transport work list doesnt retain deliveries+link+session on when a session
+     * is closed and freed while there is an active receiver link with deliveries still outstanding.
+     */
+    @Test
+    public void testTransportWorkListDoesntLeakDeliveriesEtcFromSessionFreedWithActiveReceiverWithOutstandingDeliveries()
+    {
+        MockTransportImpl transport = new MockTransportImpl();
+        ConnectionImpl connection = new ConnectionImpl();
+        transport.bind(connection);
+
+        connection.open();
+
+        Session session = connection.session();
+        session.open();
+
+        String linkName = "myClientReceiver";
+        Receiver receiver = session.receiver(linkName);
+        receiver.flow(5);
+        receiver.open();
+
+        pumpMockTransport(transport);
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
+
+        assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
+        assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
+        assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
+        assertTrue("Unexpected frame type", transport.writes.get(3) instanceof Flow);
+
+        Delivery delivery = receiver.current();
+        assertNull("Should not yet have a delivery", delivery);
+
+        // Send the necessary responses to open/begin/attach as well as a transfer
+        transport.handleFrame(new TransportFrame(0, new Open(), null));
+
+        Begin begin = new Begin();
+        begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
+        begin.setNextOutgoingId(UnsignedInteger.ONE);
+        begin.setIncomingWindow(UnsignedInteger.valueOf(1024));
+        begin.setOutgoingWindow(UnsignedInteger.valueOf(1024));
+        transport.handleFrame(new TransportFrame(0, begin, null));
+
+        Attach attach = new Attach();
+        attach.setHandle(UnsignedInteger.ZERO);
+        attach.setRole(Role.SENDER);
+        attach.setName(linkName);
+        attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
+        transport.handleFrame(new TransportFrame(0, attach, null));
+
+        assertEndpointState(receiver, EndpointState.ACTIVE, EndpointState.ACTIVE);
+        assertEndpointState(session, EndpointState.ACTIVE, EndpointState.ACTIVE);
+
+        String deliveryTag = "tag1";
+        String messageContent = "content1";
+        handleTransfer(transport, 1, deliveryTag, messageContent);
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
+
+        delivery = verifyDelivery(receiver, deliveryTag, messageContent);
+        assertNotNull("Should now have a delivery", delivery);
+
+        delivery.disposition(Accepted.getInstance());
+
+        assertEquals("Expected the delivery to be on the transport work list", delivery, connection.getTransportWorkHead());
+
+        pumpMockTransport(transport);
+
+        assertNull("Expected the delivery to cleared from the transport work list", connection.getTransportWorkHead());
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 5, transport.writes.size());
+        assertTrue("Unexpected frame type", transport.writes.get(4) instanceof Disposition);
+
+        session.close();
+
+        pumpMockTransport(transport);
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 6, transport.writes.size());
+        assertTrue("Unexpected frame type", transport.writes.get(5) instanceof End);
+
+        assertNull("Expected the transport work list to be empty", connection.getTransportWorkHead());
+        assertEndpointState(session, EndpointState.CLOSED, EndpointState.ACTIVE);
+
+        // Send the necessary responses to End
+        End end = new End();
+        transport.handleFrame(new TransportFrame(0, end, null));
+
+        assertEndpointState(session, EndpointState.CLOSED, EndpointState.CLOSED);
+
+        assertNull("Expected the transport work list to be empty", connection.getTransportWorkHead());
+
+        session.free();
+
+        pumpMockTransport(transport);
+
+        assertNull("Expected the transport work list to be empty", connection.getTransportWorkHead());
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 6, transport.writes.size());
+
+        connection.close();
+        pumpMockTransport(transport);
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 7, transport.writes.size());
+        assertTrue("Unexpected frame type", transport.writes.get(6) instanceof Close);
+    }
+
+    /**
+     * Verify that the transport doesnt retain deliveries+link+session when a session is closed
+     * and freed while there is an active sender link with deliveries still outstanding.
+     */
+    @Test
+    public void testTransportWorkListDoesntLeakDeliveriesEtcFromSessionFreedWithActiveSenderWithOutstandingDeliveries()
+    {
+        MockTransportImpl transport = new MockTransportImpl();
+        ConnectionImpl connection = new ConnectionImpl();
+        transport.bind(connection);
+
+        connection.open();
+
+        Session session = connection.session();
+        session.open();
+
+        String linkName = "myClientSender";
+        Sender sender = session.sender(linkName);
+        sender.open();
+
+        pumpMockTransport(transport);
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
+
+        assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
+        assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
+        assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
+
+        assertNull("Should not yet have a delivery", sender.current());
+
+        // Send the necessary responses to open/begin
+        transport.handleFrame(new TransportFrame(0, new Open(), null));
+
+        Begin begin = new Begin();
+        begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
+        begin.setNextOutgoingId(UnsignedInteger.ONE);
+        begin.setIncomingWindow(UnsignedInteger.valueOf(1024));
+        begin.setOutgoingWindow(UnsignedInteger.valueOf(1024));
+        transport.handleFrame(new TransportFrame(0, begin, null));
+
+        // Give the necessary response to attach for sender and grant some credit
+        Attach attach = new Attach();
+        attach.setHandle(UnsignedInteger.ZERO);
+        attach.setRole(Role.RECEIVER);
+        attach.setName(linkName);
+        attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
+        transport.handleFrame(new TransportFrame(0, attach, null));
+
+        int credit = 10;
+        Flow flow = new Flow();
+        flow.setHandle(UnsignedInteger.ZERO);
+        flow.setDeliveryCount(UnsignedInteger.ZERO);
+        flow.setNextIncomingId(UnsignedInteger.ONE);
+        flow.setNextOutgoingId(UnsignedInteger.ZERO);
+        flow.setIncomingWindow(UnsignedInteger.valueOf(1024));
+        flow.setOutgoingWindow(UnsignedInteger.valueOf(1024));
+        flow.setLinkCredit(UnsignedInteger.valueOf(credit));
+
+        transport.handleFrame(new TransportFrame(0, flow, null));
+
+        assertEndpointState(sender, EndpointState.ACTIVE, EndpointState.ACTIVE);
+        assertEndpointState(session, EndpointState.ACTIVE, EndpointState.ACTIVE);
+
+        assertEquals("Expected the sender to have credit", credit, sender.getCredit());
+
+        Delivery delivery = sendMessage(sender, "tag1", "content1");
+
+        assertEquals("Expected the delivery to be on the transport work list", delivery, connection.getTransportWorkHead());
+        assertEquals("Expected the sender to have 1 less credit", credit -1 , sender.getCredit());
+
+        pumpMockTransport(transport);
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
+        assertTrue("Unexpected frame type", transport.writes.get(3) instanceof Transfer);
+
+        assertNull("Expected the delivery to cleared from the transport work list", connection.getTransportWorkHead());
+
+        session.close();
+
+        pumpMockTransport(transport);
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 5, transport.writes.size());
+        assertTrue("Unexpected frame type", transport.writes.get(4) instanceof End);
+
+        assertNull("Expected the transport work list to be empty", connection.getTransportWorkHead());
+        assertEndpointState(session, EndpointState.CLOSED, EndpointState.ACTIVE);
+
+        // Send the necessary responses to End
+        End end = new End();
+        transport.handleFrame(new TransportFrame(0, end, null));
+
+        assertEndpointState(session, EndpointState.CLOSED, EndpointState.CLOSED);
+
+        assertNull("Expected the transport work list to be empty", connection.getTransportWorkHead());
+
+        session.free();
+
+        pumpMockTransport(transport);
+
+        assertNull("Expected the transport work list to be empty", connection.getTransportWorkHead());
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 5, transport.writes.size());
+
+        connection.close();
+        pumpMockTransport(transport);
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 6, transport.writes.size());
+        assertTrue("Unexpected frame type", transport.writes.get(5) instanceof Close);
+    }
+
+    /**
+     * Verify that the transport work list doesnt retain delivery (+link+session) object when a sender link is closed
+     * closed and freed while there a buffered/not-transferred message outstanding, as they can no longer be transferred.
+     */
+    @Test
+    public void testTransportWorkListDoesntLeakDeliveriesEtcFromSenderLinkFreedWithBufferedSend()
+    {
+        MockTransportImpl transport = new MockTransportImpl();
+        ConnectionImpl connection = new ConnectionImpl();
+        transport.bind(connection);
+
+        connection.open();
+
+        Session session = connection.session();
+        session.open();
+
+        String linkName = "myClientSender";
+        Sender sender = session.sender(linkName);
+        sender.open();
+
+        pumpMockTransport(transport);
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
+
+        assertTrue("Unexpected frame type", transport.writes.get(0) instanceof Open);
+        assertTrue("Unexpected frame type", transport.writes.get(1) instanceof Begin);
+        assertTrue("Unexpected frame type", transport.writes.get(2) instanceof Attach);
+
+        assertNull("Should not yet have a delivery", sender.current());
+
+        // Send the necessary responses to open/begin/attach. DO NOT give any credit.
+        transport.handleFrame(new TransportFrame(0, new Open(), null));
+
+        Begin begin = new Begin();
+        begin.setRemoteChannel(UnsignedShort.valueOf((short) 0));
+        begin.setNextOutgoingId(UnsignedInteger.ONE);
+        begin.setIncomingWindow(UnsignedInteger.valueOf(1024));
+        begin.setOutgoingWindow(UnsignedInteger.valueOf(1024));
+        transport.handleFrame(new TransportFrame(0, begin, null));
+
+        Attach attach = new Attach();
+        attach.setHandle(UnsignedInteger.ZERO);
+        attach.setRole(Role.RECEIVER);
+        attach.setName(linkName);
+        attach.setInitialDeliveryCount(UnsignedInteger.ZERO);
+        transport.handleFrame(new TransportFrame(0, attach, null));
+
+        assertEndpointState(sender, EndpointState.ACTIVE, EndpointState.ACTIVE);
+        assertEndpointState(session, EndpointState.ACTIVE, EndpointState.ACTIVE);
+
+        assertEquals("Expected the sender to have no credit", 0, sender.getCredit());
+
+        Delivery delivery = sendMessage(sender, "tag1", "content1");
+
+        assertEquals("Expected the delivery to be on the transport work list", delivery, connection.getTransportWorkHead());
+        assertEquals("Expected the sender to have queued message", 1 , sender.getQueued());
+
+        pumpMockTransport(transport);
+
+        // Expect no more frames to have been sent, delivery cant be sent without credit
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 3, transport.writes.size());
+
+        assertEquals("Expected the delivery to be on the transport work list", delivery, connection.getTransportWorkHead());
+
+        // Send a remote request to close the sender and action it
+        Detach detach = new Detach();
+        detach.setHandle(UnsignedInteger.ZERO);
+        detach.setClosed(true);
+        transport.handleFrame(new TransportFrame(0, detach, null));
+
+        assertEndpointState(sender, EndpointState.ACTIVE, EndpointState.CLOSED);
+
+        sender.close();
+        sender.free();
+
+        pumpMockTransport(transport);
+
+        assertEndpointState(sender, EndpointState.CLOSED, EndpointState.CLOSED);
+
+        assertEquals("Unexpected frames written: " + getFrameTypesWritten(transport), 4, transport.writes.size());
+        assertTrue("Unexpected frame type", transport.writes.get(3) instanceof Detach);
+
+        // Check the delivery isnt in the work list as it clearly cant be sent now the sender is closed.
+        assertNull("Expected the transport work list to be empty", connection.getTransportWorkHead());
+    }
 }


=====================================
tests/performance-jmh/pom.xml
=====================================
@@ -19,7 +19,7 @@
     <parent>
         <groupId>org.apache.qpid</groupId>
         <artifactId>proton-j-parent</artifactId>
-        <version>0.34.0</version>
+        <version>0.34.1</version>
         <relativePath>../../pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>


=====================================
tests/pom.xml
=====================================
@@ -23,7 +23,7 @@
   <parent>
     <groupId>org.apache.qpid</groupId>
     <artifactId>proton-j-parent</artifactId>
-    <version>0.34.0</version>
+    <version>0.34.1</version>
   </parent>
 
   <artifactId>proton-tests</artifactId>



View it on GitLab: https://salsa.debian.org/java-team/qpid-proton-j/-/commit/ed90c7d671055a86c0a9e74cdb6e77e04f5d6719

-- 
View it on GitLab: https://salsa.debian.org/java-team/qpid-proton-j/-/commit/ed90c7d671055a86c0a9e74cdb6e77e04f5d6719
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20251130/d1f8fa71/attachment.htm>


More information about the pkg-java-commits mailing list