@@ -81,38 +81,9 @@ public boolean hasPendingPackets() {
8181
8282 @ Override
8383 public void removeExpiredPackets () {
84-
85- if (pendingPublishes .isEmpty ()) {
86- return ;
84+ if (!pendingPublishes .isEmpty ()) {
85+ pendingPublishes .runInWriteLock (this ::removeExpiredPackets );
8786 }
88-
89- pendingPublishes .runInWriteLock (publishes -> {
90-
91- var currentTime = System .currentTimeMillis ();
92- var array = publishes .array ();
93-
94- for (int i = 0 , length = publishes .size (); i < length ; i ++) {
95-
96- var pendingPublish = array [i ];
97-
98- var publish = pendingPublish .publish ;
99- var messageExpiryInterval = publish .getMessageExpiryInterval ();
100-
101- if (messageExpiryInterval == MqttPropertyConstants .MESSAGE_EXPIRY_INTERVAL_UNDEFINED ||
102- messageExpiryInterval == MqttPropertyConstants .MESSAGE_EXPIRY_INTERVAL_INFINITY ) {
103- continue ;
104- }
105-
106- var expiredTime = pendingPublish .registeredTime + (messageExpiryInterval * 1000 );
107-
108- if (expiredTime < currentTime ) {
109- log .debug ("Remove pending publish {} by expiration reason" , publish );
110- publishes .fastRemove (i );
111- i --;
112- length --;
113- }
114- }
115- });
11687 }
11788
11889 @ Override
@@ -167,4 +138,32 @@ public void updatePendingPacket(
167138 public void clear () {
168139 pendingPublishes .runInWriteLock (Collection ::clear );
169140 }
141+
142+ private void removeExpiredPackets (@ NotNull Array <PendingPublish > publishes ) {
143+
144+ var currentTime = System .currentTimeMillis ();
145+ var array = publishes .array ();
146+
147+ for (int i = 0 , length = publishes .size (); i < length ; i ++) {
148+
149+ var pendingPublish = array [i ];
150+
151+ var publish = pendingPublish .publish ;
152+ var messageExpiryInterval = publish .getMessageExpiryInterval ();
153+
154+ if (messageExpiryInterval == MqttPropertyConstants .MESSAGE_EXPIRY_INTERVAL_UNDEFINED ||
155+ messageExpiryInterval == MqttPropertyConstants .MESSAGE_EXPIRY_INTERVAL_INFINITY ) {
156+ continue ;
157+ }
158+
159+ var expiredTime = pendingPublish .registeredTime + (messageExpiryInterval * 1000 );
160+
161+ if (expiredTime < currentTime ) {
162+ log .debug ("Remove pending publish {} by expiration reason" , publish );
163+ publishes .fastRemove (i );
164+ i --;
165+ length --;
166+ }
167+ }
168+ }
170169}
0 commit comments