Opened 12 years ago

Closed 12 years ago

#4251 closed Bugs (fixed)

Interprocess failed to communicate in OS X 10.5.8 Leopard under 64 bit mode

Reported by: Chih-Yao Hsieh <josephsieh@…> Owned by: Ion Gaztañaga
Milestone: Boost 1.43.0 Component: interprocess
Version: Boost 1.44.0 Severity: Problem
Keywords: Cc:

Description

This issue only exists explicitly for OSX leopard 64 bits application trying to use IPC.

Windows 32/64 bits, XP, Vista, Win 7 has no issue and OSX 10.4: 32 bits, 10.5: 32 bits, 10.6: 32/64 bits all works fine.

The issue is due to "inline void get_bootstamp(std::string &s, bool add = false)" function.

When a 64 bits host application create the shared_memory_object, there will be a folder somewhat like "33FABFC2B8FACA0133FABFC2B8FACA01" being created in the boost_interprocess directory. When the 64 bits client application trying to open the created shared_memory_object, the "get_bootstamp(std::string &s, bool add = false)" function will return "33FABFC2B8FACA010000000000000000", therefore, the client will always failed to find the shared memory object.

Change History (1)

comment:1 by Ion Gaztañaga, 12 years ago

Resolution: fixed
Status: newclosed

Disabled bootstamp in Boost 1.47. This means that shared memory/queues will go to /tmp if it exists. If /tmp is not cleared on reboot shared memory will survive to reboots, but this behaviour is allowed by POSIX. Using bootstamps to detect reboots is doing more harm than good.

Note: See TracTickets for help on using tickets.