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
|
Changes from 0.0.0 to 0.0.1
- re did tsw_cxx.m4 macro with ac_try_compile(). tsw_cxx.m4 now requires
AC_CC_PROG to assure C compiler is set before C++ since other tests
will typically depend on C alone.
- added tsw_timesys.m4 for time.h and sys/time.h mapping.
- added tsw_posix.m4 for posix test and unistd.h header.
- added tsw_pthread.m4 to detect libpthread, special headers, and to
determine means for portable setting of recursive mutex's.
- mutex.cpp now uses tsw_pthread.m4 analysis for setting mutex attributes.
- support for library searching based on different pthread implementations
such as the FSU, DCE, and CMA versions of Posix thread support.
- thread.cpp uses alternate thread sleeping methods such as nanosleep and
pthread_delay_np, and pthread_yield if available.
- thread.h and event.cpp fixed for pthread_cond_init() and
pthread_cond_destroy().
- all copyright notices added.
- configure.in added TSW_LIB_PTHREAD
Changes from 0.0.1 to 0.0.2
- Strange problem when calling 'Exit()'. Since a 'Final()' method is
still on the stack, and since pthread_exit() does not continue,
having 'Exit()' delete itself before calling pthread_exit() causes
a problem in that the 'Final()' method is invoked after the object
is out of scope. To solve this, the Exit methodology has been changed
to a 'longjmp' which returns control to a modified _exec_thread handler
that can correctly complete Final() and self delete the object before
exiting through pthread_exit(). This also means that threads that
implement Run() will, if Run() has a final return, also self delete.
- Much has changed in tsw_pthread.m4 to support scanning of the header
files for identification of the method used for recursive mutexes.
The overall structure of tsw_pthread.m4 has been cleaned up a lot both
to reduce the number of tests needed and to make better use of caching.
- thread.cpp and mutex.cpp updated to reflect changes in tsw_pthread.m4
- All m4 tsw_... macros now use tsw_cv_... configuration variables.
- thread.h cleaned up. Some members of class thread now public.
- New tsw_win32.m4 added for GNU Win32 cross-compile checks.
- Socket support has been begun.
Changes from 0.0.2 to 0.0.3
- Support for signal handler based pthread_cancel() support when feature
is missing.
- Minor typo fixes in mutex.cpp.
Changes from 0.0.3 to 0.0.4
- new THREAD_FLAGS and THREAD_LIBS substitutions to provide selective
thread support for use in Makefiles.
- -D_REENTRANT and -D_THREAD_SAFE part of THREAD_FLAGS.
- more old pthread support, including older pthread_setcancel and
pthread_setasynchronous support when older libpthread.
- addition of tsw_socket.m4 tests.
- general cleanup of SIGCANCEL support when cancellation is not provided.
- new tsw_signal.m4 tests for sighandler_t return type, posix, etc.
- setCancel now supports enable and disable of cancel states as logically
associated with cancel mode setting.
- Initial and Final routines operate in cancel disabled state.
- new getCancel() member returns current cancel setting.
- Begining of 'descriptor' classes for base of Socket and Serial.
- Ability to overide/initialize thread cancel state in Initial().
Changes from 0.0.4 to 0.0.5
- socket address classes defined.
- MutexCounter class added.
- descriptor code removed.
- freebsd compile confirmed.
Changes from 0.0.5 to 0.0.6
- The 'main' thread that represents the first thread of the application
can now be declared as a Thread(argc, argv). This allows the main
application thread to be derived as a thread classed object similar
to any other thread.
- There can only be 'one' instance of the 'main' thread.
- One can still create threads without using a 'main' thread object, but
if a 'main' thread object is used, it must be created before any other
threads.
- Common signal handling is now part of the thread class. SIGINT,
SIGTERM, and SIGHUP are initially declared to operate in only the
main thread, since all are typically associated with 'daemon' processes
(SIGHUP to re-read a config, SIGTERM and SIGINT to exit). These and
other signals are deliberately masked during sub-thread creation.
- setSignal() used to install common and interruptible handlers.
- OnSignal() holds handler for main thread signals.
- Sleep() now uses new ape_sleep() which provides signal safe sleeping for
threaded apps.
- yield() and wait(signo_t) introduced as global functions.
- pdetach() added to enable entry into 'daemon' mode.
Changes from 0.0.6 to 0.0.7
- InetAddress cleaned up. InetAddress used for binding, InetHostAddress
used for connected sockets, BroadcastAddress used for broadcasting.
- InetAddress reduced to struct in_addr.
- Socket class created, and derived for UDPSocket and TCPSocket.
- Thread now supports a copy constructor which creates a new running
thread. If a "main" thread is used, it may never be copied.
Changes from 0.0.7 to 0.0.8
- Socket operator= now added to allow cloning (via dup()) of sockets.
This and the default Socket copy constructor will probably not be
possible under winsock, though the TCPSocket copy constructor for
'accepting' a new client should still work.
- member naming of event and semaphore classes simplified.
- mutex and event support for win32 completed.
- thread support began under win32 (this probably brings win32 up to posix
at 0.0.3...)
- win32 socket code in sync with current posix socket code.
- added abstract "Buffer" class for model producer/consumer buffering.
Changes from 0.0.8 to 0.0.9
- Cleanup of m4 tests so non-threaded apps can be built alongside
threaded ones.
- Abstract Buffer class re-designed.
- GNU getopt added to libAPE if not part of native system.
- getHost and getPeer now support initial "buffer" object.
- OnAccept() added to validate remote connection requests.
- "accept" through the copy constructor now supports OnAccept() request to
enable the server TCPSocket to reject host specific connections.
Changes from 0.0.9 to 0.0.10
- logical operators for comparing and manipulating InetAddress and
address masks.
- OnAccept, getHost and getPeer changed.
- SubnetAddress used as address range object.
Changes from 0.0.10 to 0.0.11
- forgot read/write calls...
Changes from 0.0.11 to 0.0.12
- added peek methods for MSG_PEEK.
- all failed socket constructors now also close the socket in derived
classes.
Changes from 0.0.12 to 0.0,13
- fixed win32 build tree.
Changes from 0.0.13 to 0.0.14
- found that static member functions can be starting functions for new
threads. _thread_exec now gone.
- more "ITC" services including Pipe and FixedBuffer classes.
Changes from 0.0.14 to 0.0.15
- fixed Signal()'s use of RETSIGTYPE in thread.h.
- win32 I/O services in pipe externalized into fileio.h to prepare for
Serial and File classes which also require "handle" based r/w calls
under win32.
- "posix" tree low level file access classes added.
Changes from 0.0.15 to 0.0.16
- "posix" MappedFile class added for memory mapped file support.
- Serial class added. This brings the "posix" source tree feature
complete.
- Write operations for direct "string" parameters added.
- A single thread at a time can now use SIGALRM for timer support
Changes from 0.0.16 to 0.1.0
- Thread now includes suspend/resume functionality.
- Socket/Serial read/write now virtualized.
- Single signals are not portable out of Posix, a lot of the 'main'
signal support has been removed. There is now a SignalMain() as
well as SignalParent(), and _main is gone along with the odd
constructors and 'OnSignal()' stuff.
- Final() removed from the Thread class; we found the Final() could never
be called correctly from egcs virtual tables because the virtual table
resolves purely to the base class during the destructor. Instead,
~Thread() is now virtualized, and one must call Terminate() at the
front of the 'derived' destructor. This also means the termination
routine now runs in the remaining threads tid rather than the
exiting thread.
Hence, one would now commonly use in place of Final():
Newclass:~Newclass()
{
Terminate();
cleanup code...
}
Changes from 0.1.0 to 0.1.1
- Lock code parsing cleaned up in Serial class.
- New "isThread" member to see if current thread is this object.
- Ability to pass a "starting" semaphore for initial thread creation.
This resolves a strange problem, at least in egcs, that, like with
the destructor, the virtual table of the object is not usable within
the context of the object until the constructor (starting thread)
completes. Also, it enables a bunch of threads to be created without
having to be started immediately.
Change from 0.1.1 to 0.2.0
- macros.h used to hold macro functions and common definitions.
- sleep(x) translation to ape_sleep(x) now makes sleep() operate
in seconds rather than milliseconds. The new delay(x) can be used
to sleep milliseconds.
- as per suggestions by Carlos, all "APE" object names are hidden with
a "ape_" name prefix. The APE/namespace.h file may be added as the
last APE include item to remove prefix translation. This substitutes
for "namespace" support, which is not implimented in universally in
C++ compilers, and allows libape to be linked with other class
libraries that may already have a "Serial", "Socket", etc.
- with the addition of the ape_ prefix internally, a new library set
is now built that is named libape rather than libAPE, and all the
version information has been reset.
- the win32 tree uses the "APE" namespace.
- The APE Thread class usually requires a starting semaphore. If no
starting semaphore is passed (NULL used) then thread activation
requires a call to the "Start()" method. This generally assures that
the thread is never actually started before the constructor completes.
Start can also be given a 'starting' semaphore to use. Start will
fail if the thread is already started.
- The starting 'semaphore' is now the first paramater of the Thread
class.
- For self-terminating threads, a Final() method has been re-introduced.
The "Final" is called after the thread has been detached and is safe
to 'terminate'. By default, the Final method simply invokes a
'delete this' before pthread_exit() is called by Execute(). Some
may use Final() to bump a termination semaphore to signal the parent
which would then delete the object after it stops, rather than have it
self delete. One would have to add a marker if a terminating semaphore
is used that is shared by multiple threads to determine who actually
has exited.
- "Readline" added to Socket and Serial classes to simplify processing
of line oriented input.
Changes from 0.2.0 to 0.2.1
- Added "TCPSession"; a non-blocking threaded tcp socket session.
- Changes for RedHat 6.0 and improved portability.
- Changes for FreeBSD 3.1.
Changes from 0.2.1 to 0.2.2
- "Initial" can now Exit(), as needed for TCPSession
- Extended timeout in Serial class.
- Improvements in win32 code including better support for deferred
thread cancellation and a new interface, WaitHandle, to support
waiting either on a deferred cancellation or another object handle.
- addition of ThreadKey class and self id master key for getAPE() and
storage of thread specific data pointers.
Changes from 0.2.2 to 0.9.0
- Kdoc support and full documentation for APE.
- Event::Wait now returns whether timeout or signal trigged resume.
- MutexCounter() may now be initialized.
- Thread parent now done through APE pointer.
- Default application "thread" now an APE object.
- New "notification" for thread child death.
- hidden "MainThread" used to define the initial thread of the process.
- pointer referenced _parent.
- redone NamedPipe and NewFile to remove dependency on constructor
calling a virtual "Initial" member.
- Signal handling has been redone.
- timers may now be specified for individual threads on some target
platforms (such as Linux).
Changes from 0.9.0 to 0.9.1
- Install config.h from APE distribution.
- use APE/config.h when no "HAVE_CONFIG_H" found (assumes no APE
config.h file is being locally genorated). This makes APE easier
to use on a target platform outside of automake generated
packages.
Changes from 0.9.1 to 0.9.2
- stricmp macros tested for when mixing APE with other software.
- SIGSTOP and SIGCONT used for pausing and resuming threads on
systems that define threads as processes (Linux).
- Other "internally" used macros have been cleaned up to limit name
space collisions. Hence, we now have _SIG_xxx and _APE_xxx macros
where we used to have SIGCANCEL, THREAD_ALARM, etc.
- Simulate recursive mutex operation when recursive mutex support cannot
be determined. This was found nessisary for Solaris.
- More Solaris support, including the use of thr_suspend and thr_resume.
Changes from 0.9.2 to 0.9.3
- lots of win32 fixes.
- gethostname() misused.
- patches to file.h header for return type.
Changes from 0.9.3 to 0.9.4
- fix for cpp processing in configure to assure correct "cc -E" is used.
- misc. little things found with Sun compiler.
- fixed alternate inet_aton macro
- fixed _THR_SUNOS5 detection logic
Changes from 0.9.4 to 0.9.5
- replaced __SUNPRO_CC__ with _THR_SUNOS5 throughout
- fixed 64 bit compile and socket code by using socklen_t
Changes from 0.9.5 to 0.9.6
- support UDP peer streaming through UDPSimplex and UDPDuplex for
foundation of realtime streaming services.
Changes from 0.9.6 to 0.9.7
- added broadcast support to UDP peer sessions (UDPSimplex, UDPDuplex).
- rewrite of getPeer() and getHost() socket methods to return a stack
InetHostAddress() rather than a local variable.
- fixed accept method through construction.
- added accept by pointer as well as by reference.
- added missing InetHostAddress(struct in_addr) constructor.
- added support for by pointer as well as by reference when constructing
an "accepted" client.
Changes from 0.9.7 to 1.0.0
- added "pkg" build support for generic UNIX binary packages.
- added "Start()" support for thread with start semaphore rather than
acting as a dead function.
- fixed "timer" support using SIGALRM.
- added TCPSocket * constructor for TCPSession.
- TCPSession supports "self delete".
- removed serial.cpp/serial.h from posix tree.
- limited version of TCPSession now in win32 tree for use in servers. Full
TCPSession support is not possible in win32 winsock since there is no
support for a non-blocking connect() that can be completed later.
- many updates in the win32 tree to bring it up to date.
- added UDPSimplex and UDPDuplex to name space macros.
|