1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
|
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset="utf-8">
<meta name="author" content="Philip Semanchuk">
<meta name="copyright" content="All contents © 2021 Philip Semanchuk">
<meta name="keywords" content="python sysv system v ipc semaphore shared memory message queue">
<title>The sysv_ipc Module for SysV IPC Under Python -- Version History</title>
<style>
li {
margin-top: .67em;
margin-bottom: .67em;
}
</style>
</head>
<body>
<h2>Version History</h2>
<p>This is the version history for the
<a href="http://semanchuk.com/philip/sysv_ipc/">sysv_ipc module</a>.</p>
<ul>
<li id="v1_1_0"><strong><span id="current">Current</span> – 1.1.0 (17 Jan 2021) –</strong>
<ul>
<li>Drop support for Python 2, also for Python 3.4 and 3.5.</li>
<li><strong>Behavior change:</strong> <code>ftok()</code> now raises <code>OSError</code> if it fails so the particulars of the failure are visible to the caller. Thanks to James Williams for the suggestion. (Previously the function just returned -1 if it failed.)
</li>
</ul>
</li>
<li id="v1_0_1">1.0.1 (29 Nov 2019) –
<ul>
<li>Fix
<a href="https://github.com/osvenskan/sysv_ipc/issues/7">a memory leak bug in <code>SharedMemory.write()</code> that only occurred under Python 3</a>. Thanks to Andy for reporting!
</li>
<li>This will be the last version to support Python 2 which is pining for the fjords.</li>
</ul>
</li>
<li>1.0.0 (2 Feb 2018) –
<p>I'm bumping the version number to 1.0.0 because I now consider this feature complete.
That doesn't mean I won't add features, but I don't feel like I need to.
</p>
<ul>
<li>Added support for Python <code>memoryview</code> and <code>bytearray</code> objects to be created from a <code>SharedMemory</code> instance.
</li>
<li>Added support for building wheels.</li>
<li>Moved source code hosting to git and <a href='https://github.com/osvenskan/sysv_ipc'>GitHub</a>.</li>
<li>Moved the demo code into its own directory.</li>
<li>Minor changes (slightly improved tests, a few compiler warnings fixed, PEP8 improvments, etc.)</li>
</ul>
</li>
<li id="v0_7_0">0.7.0 (11 Feb 2016) –
<p>Version 0.7.0 is finally out now that this package is 7 years old...</p>
<ul>
<li>Dropped compatibility with Python < 2.7.</li>
<li>Added unit tests with almost complete coverage.</li>
<li>Fixed a doc bug for <code>SharedMemory.write()</code>. On an
attempt to write outside of the segment, the code raises
<code>ValueError</code>. The documentation had incorrectly stated that
<code>write()</code> would silently
discard the data that overflowed the segment.
</li>
<li>Fixed a code bug in <code>SharedMemory.write()</code> that
incorrectly interpreted offsets > <code>LONG_MAX</code>.
</li>
<li>Fixed a code bug in <code>SharedMemory.write()</code> that
didn’t always generate a <code>ValueError</code> for negative
offsets.
</li>
<li>Fixed a doc/code bug where <code>SharedMemory.attach()</code> was
documented to accept keyword arguments but did not. Now it does.
</li>
<li>Fixed some header bugs that prevented the code from using
<code>PY_SSIZE_T_CLEAN</code>. Thanks to Tilman Koschnick for
bringing this to my attention.
</li>
<li>Added doc to note that this module exposes <code>SHM_RDONLY</code>
as a module-level constant.
</li>
</ul>
</li>
<li id="v0_6_8">0.6.8 (12 Sept 2014) –
<ul>
<li>Fixed a bug in <code>prober.py</code> where prober would fail
on systems where Python's include file was not named
<code>pyconfig.h</code>. (RHEL 6 is one such system.) Thanks to
Joshua Harlow for the bug report and patch.
</li>
<li><i>Spasibo</i> again to Yuriy Taraday for pointing out that
the semaphore initialization example I changed in the previous
version was still not
quite correct, and for suggesting something better.
</li>
</ul>
</li>
<li id="v0_6_7">0.6.7 (1 August 2014) –
<p><i>Spasibo</i> to Yuriy Taraday for reporting some doc errors
corrected in this version.
</p>
<ul>
<li>Added KEY_MIN as a module-level constant. The documentation
has claimed that it was available for a long time so now the
code finally matches the documentation.
</li>
<li>Changed randomly generated keys to never use a value of 0.</li>
<li>Fixed two documenation errors in the special section on
semaphore initialization and gave long overdue credit to
W. Richard Stevens' book for the code idea. (Any code mistakes
are mine, not his.)
</li>
<li>This is the first version downloadable from PyPI.</li>
</ul>
</li>
<li id="v0_6_6">0.6.6 (15 October 2013) –
<p>Added the ability to use Semaphores in context managers.
Thanks to Matt Ruffalo for the suggestion and patch.
</p>
</li>
<li id="v0_6_5">0.6.5 (31 March 2013) –
<p>Fixed a bug where SharedMemory.write() claimed to accept
keyword arguments but didn't actually do so. Thanks to
Matt Ruffalo for the bug report and patch.
</p>
</li>
<li id="v0_6_4">0.6.4 (19 Dec 2012) –
<ul>
<li>Added a module-level <code>attach()</code> method based on a
suggestion by Vladimír Včelák.
</li>
<li>Added the <code>ftok()</code> method along with dire warnings about
its use.
</li>
</ul>
</li>
<li id="v0_6_3">0.6.3 (3 Oct 2010) –
<ul>
<li>Fixed a segfault in <code>write()</code> that occurred any time
an offset was passed. This was introduced in v0.6.0.
<i>Tack</i> to Johan Bernhardtson for the bug report.
</li>
</ul>
</li>
<li id="v0_6_2">0.6.2 (6 July 2010) –
<ul>
<li>Updated setup.py metadata to reflect Python 3 compatibility.
No functional change.
</li>
</ul>
</li>
<li id="v0_6_1">0.6.1 (26 June 2010) –
<ul>
<li>Fixed a typo introduced in the previous version that caused
unpredictable behavior (usually a segfault) if a block flag
was passed to <code>MessageQueue.send()</code>. <i>Obrigado</i>
to Álvaro Justen and Ronald Kaiser for the bug report and
patch.
</li>
</ul>
</li>
<li id="v0_6_0">0.6.0 (20 May 2010) –
<ul>
<li>Added Python 3 support.</li>
<li>Renamed a constant that caused a problem under AIX.
Thanks to Loic Nageleisen for the bug report.
</li>
<li>Updated this documentation a little.</li>
</ul>
</li>
<li id="v0_5_2">0.5.2 (17 Jan 2010) –
<ul>
<li>Fixed a bug that insisted on keys > 0. Thanks to 原志
(Daniel) for the bug report and patch.
</li>
<li>Fixed a bug where the module could have generated invalid
keys on systems that typedef <code>key_t</code> as a
<code>short</code>. I don't think such a system exists, though.
</li>
<li>Fixed a LICENSE file typo.</li>
<li>Added an RSS feed to this page.</li>
</ul>
</li>
<li id="v0_5_1">0.5.1 (1 Dec 2009) –
<p>No code changes in this version.</p>
<ul>
<li>Fixed the comment in <code>sysv_ipc_module.c</code> that
still referred to the GPL license.
</li>
<li>Added the attributes <code>__version</code>, <code>__author__</code>,
<code>__license__</code> and <code>__copyright__</code>.
</li>
<li>Removed <code>file()</code> from <code>setup.py</code> in favor
of <code>open()</code>.
</li>
</ul>
</li>
<li id="v0_5">0.5 (6 Oct 2009) –
<p>No code changes in this version.</p>
<ul>
<li>Changed the license from GPL to BSD.</li>
</ul>
</li>
<li id="v0_4_2">0.4.2 (22 Mar 2009) –
<p>No code changes in this version.</p>
<ul>
<li>Fixed broken documentation links to youtube.</li>
<li>Fixed the project name in the LICENSE file.</li>
</ul>
</li>
<li id="v0_4_1"> 0.4.1 (12 Feb 2009) –
<ul>
<li>Changed status to beta.</li>
<li>Added automatic generation of keys.</li>
<li>Added a message queue demo.</li>
<li>Added <code>str()</code> and <code>repr()</code> support to all
objects.</li>
<li>Fixed a bug in <code>SharedMemory.write()</code> that could cause
a spurious error of "Attempt to write past end of memory
segment". This bug only occurred on platforms using
different sizes for <code>long</code> and <code>int</code>, or
<code>long</code> and <code>py_size_t</code>
(depending on Python version). <em>Tack</em> to Jesper
for debug help.
</li>
<li>Plugged a memory leak in <code>MessageQueue.receive()</code>.</li>
<li>Added a VERSION attribute to the module.</li>
</ul>
</li>
<li id="v0_4">0.4 (28 Jan 2009) –
<ul>
<li>Added message queues.</li>
<li>Fixed a bug where the <code>key</code> attribute of SharedMemory objects
returned garbage.
</li>
<li>Fixed a bug where keys > INT_MAX would get truncated on
platforms where longs are bigger than ints.
</li>
<li>Provided decent inline documentation for object attributes
(available via the <code>help()</code> command).
</li>
<li>Rearranged the code which was suffering growing pains.</li>
</ul>
</li>
<li id="v0_3">0.3 (16 Jan 2009) –
<p>This version features a rename of classes and errors
(sorry about breaking the names), some modifications to
semaphore timeouts, and many small fixes.
</p>
<p>A semaphore's <code>.block</code> flag now consistently trumps the
timeout. When <code>False</code>, the timeout is irrelevant -- calls
will never block. In prior versions, the flag was ignored
when the timeout was non-zero.
</p>
<p>Also, on platforms (such as OS X) where <code>semtimedop()</code> is
not supported, all timeouts are now treated as <code>None</code>.
In other words, when <code>.block</code> is True, all calls
wait as long as necessary.
</p>
<p>Other fixes –</p>
<ul>
<li>Fixed the poor choices I'd made for class and
error names by removing the leading "SysV" and "SysVIpc".
</li>
<li>Removed dependencies on Python 2.5. The module now works
with Python 2.4.4 and perhaps earlier versions.
</li>
<li>Fixed a bug where I was not following SysV semaphore semantics
for interaction between timeouts and the block flag.
</li>
<li>Fixed compile problems on OpenSolaris 2008.05.</li>
<li>Got rid of OS X compile warnings.</li>
<li>Fixed many instances where I was making potentially lossy
conversions between Python values and Unix-specific
types like <code>key_t</code>, <code>pid_t</code>, etc.
</li>
<li>Fixed a bug in the SharedMemory <code>attach()</code> function
that would set an error string but not return an error
value if the passed address was not <code>None</code> or a long.
</li>
<li>Simplified the code a little.</li>
<li>Restricted the semaphore <code>acquire()</code> and
<code>release()</code> delta to be between SHORT_MIN and
SHORT_MAX since
<a href="http://opengroup.org/onlinepubs/007908775/xsh/semop.html">it
is a short in the SUSv2 spec</a>.
</li>
<li>Fixed a bug where calling <code>acquire()</code> or
<code>release()</code> with a delta of <code>0</code> would call
<code>.Z()</code> instead.
</li>
<li>Disallowed byte counts ≤ <code>0</code> in
<code>SharedMemory.read()</code>
</li>
<li>Fixed a bug in the <code>SharedMemory</code> init code that
could, under vanishingly rare circumstances, return failure
without setting the error code.
</li>
<li>Removed some dead code relating to the <code>.seq</code> member
of the <code>sem_perm</code> and <code>shm_perm</code> structs.
</li>
<li>Stopped accessing the non-standard <code>key</code>
(a.k.a. <code>_key</code> and <code>__key</code>) element of the
<code>ipc_perm</code> struct.
</li>
<li>Added code to ensure the module doesn't try to create
a string that's larger than Python permits when reading
from shared memory.
</li>
</ul>
</li>
<li>0.2.1 (3 Jan 2009) –
<ul>
<li>Fixed a bug that prevented the module-specific
errors (<code>ExistentialError</code>, etc.) from
being visible in the module.
</li>
<li>Fixed a bug that re-initialized shared memory with
the init character when only <code>IPC_CREAT</code> was specified
and an existing segment was opened.
</li>
<li>Fixed a bug that always defaulted the size of a shared
memory segment to <code>PAGE_SIZE</code>. Updated code and
documentation to use intelligent defaults. <em>Tack</em> to
Jesper for the bug report.
</li>
<li>Several cosmetic changes. (Added more metadata to setup.py,
added a newline to the end of probe_results.h to avoid
compiler complaints, etc.)
</li>
</ul>
</li>
<li>0.2 (16 Dec 2008) –
Lots of small fixes.
<ul>
<li>Fixed a bug where calling <code>shm.remove()</code> on shared
memory that was already removed would cause a SystemError.
(I wasn't setting the Python error before returning.)
</li>
<li>Fixed a couple of bugs that would cause the creation
of a new, read-only shared memory segment to fail.
</li>
<li>Fixed a bug that would cause the creation
of a new, read-only semaphore to fail.
</li>
<li>Added the constant <code>IPC_CREX</code>.</li>
<li>Renamed (sorry) <code>MAX_KEY</code> to <code>KEY_MAX</code> and
<code>MAX_SEMAPHORE_VALUE</code> to <code>SEMAPHORE_VALUE_MAX</code>
to be consistent with the C naming convention in limits.h.
</li>
<li>Hardcoded <code>SEMAPHORE_VALUE_MAX</code> to 32767 until I can
find a reliable way to determine it at install time.
</li>
<li>Changed prober.py to write out a C header file with
platform-specific definitions in it.
</li>
<li>Replaced OSError in shared memory functions with custom
errors from this module.
</li>
<li>Added code to raise a ValueError when an attempt is made
to assign an out-of-range value to a semaphore.
</li>
<li>Added code to raise a ValueError when an out-of-range key
is passed to a constructor.
</li>
<li>Fixed a bug in the demo program conclusion.c that caused
some informational messages to be printed twice.
</li>
<li>Fixed some documentation bugs.</li>
</ul>
</li>
<li>0.1 (4 Dec 2008) – Original (alpha) version.</li>
</ul>
</body>
</html>
|