IP Library Granted Patent US 8,898,399
Granted Patent B2
US 8,898,399 · App. 13/298,237 · Granted Nov 25, 2014

Locking and signaling for implementing messaging transports with shared memory

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,898,399
App. No.
13/298,237
Granted
Nov 25, 2014
Kind
B2
Abstract

Disclosed are systems and methods for transporting data using shared memory comprising allocating, by one of a plurality of sender application, one or more pages, wherein the one or more pages are stored in a shared memory, wherein the shared memory is partitioned into one or more pages, and writing data, by the sender application, to the allocated one or more pages, wherein a page is either available for use or allocated to the sender applications, wherein the one or more pages become available after the sender application has completed writing the data. The systems and methods further disclose sending a signal, by the sender application, to a receiver application, wherein the signal notifies the receiver application that writing the data to a particular page is complete, reading, by the receiver application, the data from the one or more pages, and de-allocating, by the receiver application, the one or more pages.

Claims (68)

1. A server for transporting data using shared memory, where in the server comprises:

shared memory, wherein the shared memory is partitioned into one or more pages and a free list, the free list having a first free pointer pointing to a first free page of the free list and the free list being a circular buffer data structure;

a plurality of sender applications comprising a first sender application and a second sender application, wherein:

the first sender application and the second sender application are both operable to identify a same first free page from among the partitioned pages by reading the first free pointer from the free list;

the first sender application and the second sender application are operable to compete to allocate the first free page;

the first sender application is operable to allocate the first free page identified by the first sender application and the second sender application when the first sender application completes a compare and swap operation or similar atomic processor instruction before the second sender application, wherein the first sender application completes the compare and swap operation or similar atomic processor instruction before the second sender application when the first sender application sets the first free page to point to an allocated pages list of the first sender application;

the first sender application is operable to write data to the allocated page, wherein a page is either available for use or allocated to only one of the sender applications;

the allocated page becomes available for a receiver application to read data after the first sender application has completed writing the data;

the first sender application is operable to send a signal to the receiver application, wherein the signal notifies the receiver application that writing the data to the allocated page is complete; and

the free list is accessible directly by the sender applications; and

the receiver application, wherein the receiver application is operable to read the data from the allocated page and de-allocate the allocated page, wherein each of the pages available for use can be allocated to any one of the plurality of sender applications.

2. The server of claim 1 , wherein the server is operable to receive one or more messages and write the one or more messages to the shared memory.

3. The server of claim 1 , wherein the one or more pages are stored in a circular free list.

4. The server of claim 1 , wherein the shared memory may be virtual memory.

5. The server of claim 1 , wherein the sender applications are operable to:

check if there is space in a page most recently allocated;

if there is insufficient space, allocate a page from a list of available pages;

link the page into a page list at the sender application; and

write data to the page.

6. The server of claim 1 , wherein the server is operable to allow only one of the sender applications to allocate a page.

7. The server of claim 1 , wherein the server is operable to return the page to a list of available pages upon the completion of the receiver application reading the data from the page.

8. The server of claim 1 , wherein the server is a message-oriented middleware server.

9. The server of claim 1 , wherein the page comprises a header, wherein the header comprises a bit array having bits representing registered receivers and a count of bytes that have been written to the page.

10. A method for transporting data using shared memory, where in the method comprises:

identifying, by both a first sender application and a second sender application, a same first free page from among one or more pages partitioned in a shared memory by reading a first free pointer from a free list, wherein the first free pointer is a pointer to the first free page of the free list, and wherein the free list is a circular buffer data structure residing in the shared memory and accessible directly by the first and second sender applications;

competing, by the first sender application and the second sender application, for the allocation of the first free page;

allocating, by the first sender application, the first free page identified by the first sender application and the second sender application when the first sender application completes a compare and swap operation or similar atomic processor instruction before the second sender application, wherein the first sender application completes the compare and swap operation or similar atomic processor instruction before the second sender application when the first sender application sets the first free page to point to an allocated pages list of the first sender application, wherein the identified first free page is stored in a shared memory, wherein the shared memory is partitioned into one or more pages;

writing data, by the first sender application, to the allocated page, wherein a page is either available for use or allocated to only one of the sender applications, wherein the allocated page becomes available for a receiver application to read data after the first sender application has completed writing the data;

sending a signal, by the first sender application, to the receiver application, wherein the signal notifies the receiver application that writing the data to the allocated page is complete;

reading, by the receiver application, the data from the allocated page; and

de-allocating, by the receiver application, the allocated page, wherein each of the pages available for use can be allocated to any one of the plurality of sender applications.

11. The method of claim 10 , wherein the method further comprises receiving one or more messages and writing the one or more messages to the shared memory.

12. The method of claim 10 , wherein the one or more pages are stored in a circular free list.

13. The method of claim 10 , wherein the shared memory may be virtual memory.

14. The method of claim 10 , wherein the method further comprises: checking if there is space in a page most recently allocated; if there is insufficient space, allocating a page from a list of available pages; linking the page into a page list at the sender application; and writing data to the page.

15. The method of claim 10 , wherein the method further comprises allowing only one sender application to allocate a page.

16. The method of claim 10 , wherein the method further comprises returning the page to a list of available pages upon the completion of the receiver application reading the data from the page.

17. The method of claim 10 , wherein the receiver application and the sender application are located at a message-oriented middleware server.

18. The method of claim 10 , wherein the page comprises a header, wherein the header comprises a bit array having bits representing registered receivers and a count of bytes that have been written to the page.

19. Logic for transporting data using shared memory, the logic being embodied in a non-transitory computer-readable medium and when executed operable to:

identify, by both a first sender application and a second sender application, a same first free page from among one or more pages partitioned in a shared memory by reading a first free pointer from a free list, wherein the first free pointer is a pointer to the first free page of the free list, and wherein the free list is a circular buffer data structure residing in the shared memory and accessible directly by the first and second sender applications;

compete, by the first sender application and the second sender application, for the allocation of the first free page;

allocate, by the first sender application, the first free page identified by the first sender application and the second sender application when the first sender application completes a compare and swap operation or similar atomic processor instruction before the second sender application, wherein the first sender application completes the compare and swap operation or similar atomic processor instruction before the second sender application when the first sender application sets the first free page to point to an allocated pages list of the first sender application, wherein the identified first free page is stored in a shared memory, wherein the shared memory is partitioned into one or more pages;

write data, by the first sender application, to the allocated page, wherein a page is either available for use or allocated to only one of the sender applications, wherein the allocated page becomes available for a receiver application to read data after the first sender application has completed writing the data;

send a signal, by the first sender application, to the receiver application, wherein the signal notifies the receiver application that writing the data to the allocated page is complete;

read, by the receiver application, the data from the allocated page; and

de-allocate, by the receiver application, the allocated page, wherein each of the pages available for use can be allocated to any one of the plurality of sender applications.

20. The logic of claim 19 , wherein the logic when executed is further operable to receive one or more messages and write the one or more messages to the shared memory.

21. A server for transporting data comprising:

a first sender application and a second sender application;

one or more receiver applications; and

shared memory partitioned into one or more pages and a free list, the free list comprising of one or more free pages having a first free pointer pointing to a first free page of the one or more free pages, wherein the free list is a circular buffer data structure and accessible by the first and second sender applications, wherein each free page is available to any one of the sender applications;

wherein each sender application is operable to send data to one or more of the receiver applications by:

identifying, by both the first sender application and the second sender application, a same first free page from among the one or more free pages by reading the first free pointer from the free list;

performing, by the first sender application before the second sender application, a compare and swap operation or similar atomic processor instruction, wherein the first sender application completes the compare and swap operation or similar atomic processor instruction before the second sender application when the first sender application sets the first free page to point to an allocated pages list of the first sender application;

writing data to the first free page; and

notifying the one or more receiver applications when the writing is complete; and

wherein each notified receiver application is operable to read the data of the one or more written pages and return the one or more read pages to the free list.

22. A server for transporting data comprising:

a first sender application and a second sender application;

one or more receiver applications; and

shared memory partitioned into one or more pages and a free list, the free list comprising of one or more free pages having a first free pointer pointing to a first free page of the one or more free pages, wherein the free list is a circular buffer data structure and accessible by the first and second sender applications, wherein each free page is available to any one of the sender applications;

wherein each sender application is operable to send data to one or more of the receiver applications by:

identifying, by both the first sender application and the second sender application, a same first free page from among the one or more free pages by reading the first free pointer from the free list;

performing, by the first sender application before the second sender application, a compare and swap operation or similar atomic processor instruction, wherein the first sender application complete the compare and swap operation or similar atomic processor instruction before the second sender application when the first sender application sets the first free page to point to an allocated pages list of the first sender application;

writing data to first free page; and

notifying the one or more receiver applications when the writing is complete; and

wherein each notified receiver application is operable to return the one or more written pages to the free list when a data transport fault occurs.

Assignments (15)
PATENT SECURITY AGREEMENT Recorded Aug 15, 2025
From: CLOUD SOFTWARE GROUP, INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 072488/0172 →
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
CHANGE OF NAME Recorded Feb 7, 2023
From: TIBCO SOFTWARE INC.
To: CLOUD SOFTWARE GROUP, INC.
Reel/Frame 062714/0634 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
RELEASE REEL 052115 / FRAME 0318 Recorded Oct 3, 2022
From: KKR LOAN ADMINISTRATION SERVICES LLC
To: TIBCO SOFTWARE INC.
Reel/Frame 061588/0511 →
RELEASE (REEL 034536 / FRAME 0438) Recorded Sep 30, 2022
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 061574/0963 →
RELEASE (REEL 054275 / FRAME 0975) Recorded May 7, 2021
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 056176/0398 →
SECURITY AGREEMENT Recorded Nov 2, 2020
From: TIBCO SOFTWARE INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 054275/0975 →
SECURITY AGREEMENT Recorded Mar 6, 2020
From: TIBCO SOFTWARE INC.
To: KKR LOAN ADMINISTRATION SERVICES LLC, AS COLLATERAL AGENT
Reel/Frame 052115/0318 →
SECURITY INTEREST Recorded Dec 5, 2014
From: TIBCO SOFTWARE INC.; TIBCO KABIRA LLC; NETRICS.COM LLC
To: JPMORGAN CHASE BANK., N.A., AS COLLATERAL AGENT
Reel/Frame 034536/0438 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 7, 2014
From: LESHCHINER, DAN; MAHURKAR, BALBHIM
To: TIBCO SOFTWARE INC.
Reel/Frame 033903/0211 →