From: <bi...@us...> - 2008-08-03 23:49:31
|
Revision: 2840 http://oorexx.svn.sourceforge.net/oorexx/?rev=2840&view=rev Author: bigrixx Date: 2008-08-03 23:49:39 +0000 (Sun, 03 Aug 2008) Log Message: ----------- incremental checkin Modified Paths: -------------- sandbox/rick/rxapi/rexutils/rxsock.mak sandbox/rick/rxapi/rexutils/windows/rxwinsys.cpp sandbox/rick/rxapi/rexxapi/client/LocalAPIManager.cpp sandbox/rick/rxapi/rexxapi/client/LocalAPIManager.hpp sandbox/rick/rxapi/rexxapi/server/APIServer.cpp sandbox/rick/rxapi/rexxapi/server/APIServer.hpp sandbox/rick/rxapi/rexxapi/server/MacroSpaceManager.hpp sandbox/rick/rxapi/rexxapi/server/QueueManager.cpp sandbox/rick/rxapi/rexxapi/server/QueueManager.hpp sandbox/rick/rxapi/rexxapi/server/RegistrationManager.hpp sandbox/rick/rxapi/rexxapi/server/platform/unix/APIService.cpp sandbox/rick/rxapi/rexxapi/server/platform/windows/APIService.cpp sandbox/rick/rxapi/rxregexp/rxregexp.mak sandbox/rick/rxapi/utilities/rxqueue/platform/windows/rxqueue.cpp Removed Paths: ------------- sandbox/rick/rxapi/rexxapi/Makefile.win Modified: sandbox/rick/rxapi/rexutils/rxsock.mak =================================================================== --- sandbox/rick/rxapi/rexutils/rxsock.mak 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexutils/rxsock.mak 2008-08-03 23:49:39 UTC (rev 2840) @@ -45,10 +45,6 @@ !include "$(OR_LIBSRC)\ORXWIN32.MAK" -!IFNDEF OR_ORYXASRC -!ERROR Build error, OR_ORYXASRC not set -!ENDIF - OBJS = $(OR_OUTDIR)\rxsock.obj $(OR_OUTDIR)\rxsockfn.obj # Following for rxsock.DLL Modified: sandbox/rick/rxapi/rexutils/windows/rxwinsys.cpp =================================================================== --- sandbox/rick/rxapi/rexutils/windows/rxwinsys.cpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexutils/windows/rxwinsys.cpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -38,7 +38,6 @@ #include <windows.h> #include "oorexxapi.h" -#include "APIUtil.h" #include <stdio.h> #include <string.h> #include <ddeml.h> Deleted: sandbox/rick/rxapi/rexxapi/Makefile.win =================================================================== --- sandbox/rick/rxapi/rexxapi/Makefile.win 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/Makefile.win 2008-08-03 23:49:39 UTC (rev 2840) @@ -1,80 +0,0 @@ -#---------------------------------------------------------------------------- -# -# Copyright (c) 2005-2006 Rexx Language Association. All rights reserved. -# -# This program and the accompanying materials are made available under -# the terms of the Common Public License v1.0 which accompanies this -# distribution. A copy is also available at the following address: -# http://www.ibm.com/developerworks/oss/CPLv1.0.htm -# -# Redistribution and use in source and binary forms, with or -# without modification, are permitted provided that the following -# conditions are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the distribution. -# -# Neither the name of Rexx Language Association nor the names -# of its contributors may be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#---------------------------------------------------------------------------- - - -# This is a part of the ooRexx Windows build - - -!include $(top_srcdir)\Nmake.inc - -INCLUDES = $(OOREXXINC) \ - /I$(top_srcdir)\kernel\messages \ - /I$(top_srcdir)\rexxapi \ - /I$(top_srcdir)\kernel\api - -DLLOBJS = RexxLegacyAPI.obj SysLegacyAPI.obj - -SHAREDLIB = $(top_srcdir)\shared\rxshared.lib - -SHAREDDLLVER = $(top_srcdir)\shared\verinfo_dll.res - -#################### build rexxapi.dll ######################################## - -all: rexxapi.dll rexxapi.lib - -rexxapi.dll rexxapi.lib: $(DLLOBJS) $(COMMONOBJS) $(SHAREDLIB) $(SHAREDDLLVER) \ - $(OOREXXLIBS) platform\windows\rexxapi.def - $(LD) /DLL $(LFLAGS) $(DLLOBJS) $(COMMONOBJS) $(SHAREDLIB) \ - $(WINLIBS) $(SHAREDDLLVER) $(OOREXXLIBS) /SUBSYSTEM:WINDOWS \ - /DEF:platform\windows\rexxapi.def /OUT:rexxapi.dll - -RexxLegacyAPI.obj: RexxLegacyAPI.cpp \ - $(top_srcdir)\kernel\api\RexxLegacyAPI.hpp \ - $(COMMONHEADERS) - $(CC) $(CFLAGS) RexxLegacyAPI.cpp $(OUTFLAG) - -SysLegacyAPI.obj: platform\windows\SysLegacyAPI.cpp \ - $(top_srcdir)\kernel\api\RexxLegacyAPI.hpp \ - $(COMMONHEADERS) - $(CC) $(CFLAGS) platform/windows/SysLegacyAPI.cpp $(OUTFLAG) - - -#################### clean ######################### - -clean: - del $(CLEAN) - Modified: sandbox/rick/rxapi/rexxapi/client/LocalAPIManager.cpp =================================================================== --- sandbox/rick/rxapi/rexxapi/client/LocalAPIManager.cpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/client/LocalAPIManager.cpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -57,6 +57,8 @@ { // create an intialize this. If this fails, an exception is thrown singleInstance = new LocalAPIManager(); + // to the process-specific initialization now. + singleInstance->initProcess(); } return singleInstance; } Modified: sandbox/rick/rxapi/rexxapi/client/LocalAPIManager.hpp =================================================================== --- sandbox/rick/rxapi/rexxapi/client/LocalAPIManager.hpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/client/LocalAPIManager.hpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -54,7 +54,8 @@ LocalAPIManager() { - initProcess(); + connectionEstablished = false; + session = 0; } static LocalAPIManager *getInstance(); Modified: sandbox/rick/rxapi/rexxapi/server/APIServer.cpp =================================================================== --- sandbox/rick/rxapi/rexxapi/server/APIServer.cpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/server/APIServer.cpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -76,7 +76,7 @@ * message is handled through to completion, so the message * queue is the synchronization point. */ -void APIServer::processMessages() +void APIServer::listenForConnections() { ServiceMessage message; @@ -89,73 +89,46 @@ { break; } + // create a new thread to service this client connection + APIServerThread *thread = new APIServerThread(this, connection); + thread.start(); + } +} - // everything is handled synchronously by default. - bool returnDeferred = false; - { - // synchronize access at this point. - ServerLock(this); - try - { - // read the message. - message.readMessage(connection); +/** + * Process the Rexx API requests as a queue of messages. Each + * message is handled through to completion, so the message + * queue is the synchronization point. + */ +void APIServer::processMessages(SysServerConnection *connection) +{ + ServiceMessage message; - message.result = MESSAGE_OK; // unconditionally zero the result - // each target handles its own dispatch. - switch (message.messageTarget) - { - case QueueManager: - case RegistrationManager: - case MacroSpaceManager: - { - getInstance(message)->dispatch(message); - break; - } + while (serverActive) + { + // read the message. + message.readMessage(connection); - // general API control message. - case APIManager: - { - dispatch(message); - break; - } - } - - } - // we have a pull with wait operation from a queue that can't yet be - // satisfied, so we're going to spin off a thread and let it run. - catch (ExecutionDeferral) + message.result = MESSAGE_OK; // unconditionally zero the result + // each target handles its own dispatch. + switch (message.messageTarget) + { + case QueueManager: + case RegistrationManager: + case MacroSpaceManager: { - try - { - QueueReadThread *reader = new QueueReadThread(this, &getInstance(message)->queueManager, connection, &message); - reader->start(); - // don't return the message - returnDeferred = true; - } - catch (ServiceException *e) - { - message.setExceptionInfo(e); - // there is no extra data to return for exception cases. - message.freeMessageData(); - } - catch (std::bad_alloc &) - { - message.setExceptionInfo(SERVER_FAILURE, "Server memory error"); - // there is no extra data to return for exception cases. - message.freeMessageData(); - } + getInstance(message)->dispatch(message); + break; } + // general API control message. + case APIManager: + { + dispatch(message); + break; + } } - - if (!returnDeferred) - { - // send the result back to the sender. - message.writeResult(connection); - // disconnect from this instance. - delete connection; - } } } @@ -265,6 +238,9 @@ */ APIServerInstance *APIServer::getInstance(ServiceMessage &m) { + // synchronize access on this + ServerLock(this); + APIServerInstance *current = instances; while (current != NULL) { Modified: sandbox/rick/rxapi/rexxapi/server/APIServer.hpp =================================================================== --- sandbox/rick/rxapi/rexxapi/server/APIServer.hpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/server/APIServer.hpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -53,7 +53,8 @@ virtual ~APIServer() { ; } void terminateServer(); void initServer(); - void processMessages(); + void listenForConnections(); + void processMessages(SysServerConnection *connection); ServiceReturn shutdown(); virtual bool isStoppable(); void cleanupProcessResources(ServiceMessage &message); Modified: sandbox/rick/rxapi/rexxapi/server/MacroSpaceManager.hpp =================================================================== --- sandbox/rick/rxapi/rexxapi/server/MacroSpaceManager.hpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/server/MacroSpaceManager.hpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -150,7 +150,7 @@ }; - ServerMacroSpaceManager() { ; } + ServerMacroSpaceManager() { lock.create(); } void terminateServer(); void addMacro(ServiceMessage &message); @@ -172,6 +172,7 @@ } protected: + SysMutex lock; // our subsystem lock MacroTable macros; // all of the manaaged macros. }; Modified: sandbox/rick/rxapi/rexxapi/server/QueueManager.cpp =================================================================== --- sandbox/rick/rxapi/rexxapi/server/QueueManager.cpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/server/QueueManager.cpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -185,8 +185,16 @@ * @return true if the queue had a data item, false if it was currently * empty. */ -bool DataQueue::pullData(ServiceMessage &message) +bool DataQueue::pullData(ServerQueueManager *manager, ServiceMessage &message) { + Lock managerLock(manager->lock); // this needs synchronization here + + // now that we have the lock, clear the wait sem unconditionally. + // this should be safe, as it is either already clear, and has waiters camped + // on it, or it has recently been posted, and since we're going to read data, + // we either want it cleared for others to wait, or we're going to need to wait + // on it ourself. + waitSem.clear(); QueueItem *item = getFirst(); // if we have an item, return it. if (item != NULL) @@ -215,21 +223,47 @@ * * @param message The message from the client. */ -void DataQueue::pull(ServiceMessage &message) +void DataQueue::pull(ServerQueueManager *manager, ServiceMessage &message) { - // try to pull an item off the queue. - if (!pullData(message)) + // this might take multiple times if we have to wait + size_t noWait = (size_t)message.parameter1; + + // if the pull succeeded, return now. + if (pullData(message)) { - // nowait value - size_t noWait = (size_t)message.parameter1; - if (noWait == QUEUE_WAIT_FOR_DATA) + return; + } + + // nowait value + if (noWait != QUEUE_WAIT_FOR_DATA) + { + message.setResult(QUEUE_EMPTY); // nada + return; + } + else + { { - // indicate we need to wait for this - throw QueueWait; + Lock managerLock(manager->lock); + // indicate we have another waiting queue + queue->addWaiter(); } - else + // now keep looping until we actually get an item + while (true) { - message.setResult(QUEUE_EMPTY); // nada + queue->waitForData(); + { + // see if this is doable now without waiting...there was a window of + // opportunity for an item to be added. + if (queue->pullData(message)) + { + { + Lock managerLock(manager->lock); + // remove us as a waiter + queue->removeWaiter(); + } + return; + } + } } } } @@ -432,7 +466,7 @@ void ServerQueueManager::pullFromSessionQueue(ServiceMessage &message) { DataQueue *queue = (DataQueue *)message.parameter3; - queue->pull(message); + queue->pull(this, message); } @@ -454,7 +488,7 @@ // queue exists, so add the item else { - queue->pull(message); + queue->pull(this, message); } } @@ -716,51 +750,64 @@ */ void ServerQueueManager::dispatch(ServiceMessage &message) { - switch (message.operation) + // the pull operations might have to wait for an item to be added, + // so they need to control their own locking mechanisms + if (message.operation == PULL_FROM_NAMED_QUEUE) { - case NEST_SESSION_QUEUE: - nestSessionQueue(message); - break; - case CREATE_SESSION_QUEUE: - createSessionQueue(message); - break; - case CREATE_NAMED_QUEUE: - createNamedQueue(message); - break; - case DELETE_SESSION_QUEUE: - deleteSessionQueue(message); - break; - case DELETE_NAMED_QUEUE: - deleteNamedQueue(message); - break; - case GET_SESSION_QUEUE_COUNT: - getSessionQueueCount(message); - break; - case GET_NAMED_QUEUE_COUNT: - getNamedQueueCount(message); - break; - case CLEAR_SESSION_QUEUE: - clearSessionQueue(message); - break; - case CLEAR_NAMED_QUEUE: - clearNamedQueue(message); - break; - case ADD_TO_NAMED_QUEUE: - addToNamedQueue(message); - break; - case ADD_TO_SESSION_QUEUE: - addToSessionQueue(message); - break; - case PULL_FROM_NAMED_QUEUE: - pullFromNamedQueue(message); - break; - case PULL_FROM_SESSION_QUEUE: - pullFromSessionQueue(message); - break; - default: - message.setExceptionInfo(SERVER_FAILURE, "Invalid queue manager operation"); - break; + addToNamedQueue(message); } + else if (message.operation == PULL_FROM_SESSION_QUEUE) + { + addToSessionQueue(message); + } + else { + Lock managerLock(lock); // we need to synchronize on this instance + switch (message.operation) + { + case NEST_SESSION_QUEUE: + nestSessionQueue(message); + break; + case CREATE_SESSION_QUEUE: + createSessionQueue(message); + break; + case CREATE_NAMED_QUEUE: + createNamedQueue(message); + break; + case DELETE_SESSION_QUEUE: + deleteSessionQueue(message); + break; + case DELETE_NAMED_QUEUE: + deleteNamedQueue(message); + break; + case GET_SESSION_QUEUE_COUNT: + getSessionQueueCount(message); + break; + case GET_NAMED_QUEUE_COUNT: + getNamedQueueCount(message); + break; + case CLEAR_SESSION_QUEUE: + clearSessionQueue(message); + break; + case CLEAR_NAMED_QUEUE: + clearNamedQueue(message); + break; + case ADD_TO_NAMED_QUEUE: + addToNamedQueue(message); + break; + case ADD_TO_SESSION_QUEUE: + addToSessionQueue(message); + break; + case PULL_FROM_NAMED_QUEUE: + pullFromNamedQueue(message); + break; + case PULL_FROM_SESSION_QUEUE: + pullFromSessionQueue(message); + break; + default: + message.setExceptionInfo(SERVER_FAILURE, "Invalid queue manager operation"); + break; + } + } } void ServerQueueManager::cleanupProcessResources(SessionID session) @@ -773,114 +820,3 @@ deleteSessionQueue((DataQueue *)queue); } } - -/** - * Do a deferred pull from the queue when the call has specified - * that we should wait until a queue item is available. - * - * @param server The server we're running as part of. - * @param message The message we're processing. - */ -void ServerQueueManager::deferredPull(APIServer *server, ServiceMessage &message) -{ - DataQueue *queue = NULL; - { - // get exclusive access - ServerLock lock(server); - if (message.operation == PULL_FROM_NAMED_QUEUE) - { - queue = namedQueues.locate(message.nameArg); - } - else - { - queue = (DataQueue *)message.parameter3; - } - - // not previously created? - if (queue == NULL) - { - // this is an error - message.setExceptionInfo(QUEUE_DOES_NOT_EXIST, message.nameArg); - return; - } - // see if this is doable now without waiting...there was a window of - // opportunity for an item to be added. - if (queue->pullData(message)) - { - return; - } - - // indicate we have another waiting queue - queue->addWaiter(); - } - - // NOTE: we've release the lock here! - - // now keep looping until we actually get an item - while (true) - { - queue->waitForData(); - { - // get exclusive access again - ServerLock lock(server); - // see if this is doable now without waiting...there was a window of - // opportunity for an item to be added. - if (queue->pullData(message)) - { - // remove us as a waiter - queue->removeWaiter(); - return; - } - } - } -} - -/** - * Constructor for a queue reader thread. - * - * @param s The server instance we're running under. - * @param c The client connection used to return the result. - * @param m The current message. - */ -QueueReadThread::QueueReadThread(APIServer *s, ServerQueueManager *q, SysServerConnection *c, ServiceMessage *m) : SysThread() -{ - server = s; - manager = q; - connection = c; - message = *m; // this copies the message content -} - - -// start up the reader thread. -void QueueReadThread::start() -{ - SysThread::createThread(); -} - -/** - * Dispatch the newly created reader thread to do it's work. - */ -void QueueReadThread::dispatch() -{ - try - { - // have the queue manager do the work. - manager->deferredPull(server, message); - } - catch (ServiceException *e) - { - message.setExceptionInfo(e); - // there is no extra data to return for exception cases. - message.freeMessageData(); - } - catch (std::bad_alloc &) - { - message.setExceptionInfo(SERVER_FAILURE, "Server memory error"); - // there is no extra data to return for exception cases. - message.freeMessageData(); - } - // send the result back to the sender. - message.writeResult(connection); - // disconnect from this instance. - delete connection; -} Modified: sandbox/rick/rxapi/rexxapi/server/QueueManager.hpp =================================================================== --- sandbox/rick/rxapi/rexxapi/server/QueueManager.hpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/server/QueueManager.hpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -100,6 +100,7 @@ { session = s; references = 1; // session queues always have one ref + waitSem.create(); // make sure this is created } DataQueue(const char *name) @@ -125,7 +126,6 @@ inline void addWaiter() { waiters++; - waitSem.create(); // make sure the semaphore is created once we're waiting. } inline void removeWaiter() @@ -153,8 +153,8 @@ return waiters > 0; } - void pull(ServiceMessage &message); - bool pullData(ServiceMessage &message); + void pull(ServerQueueManager *manager, ServiceMessage &message); + bool pullData(ServerQueueManager *manager, ServiceMessage &message); inline void addReference() { references++; } inline size_t removeReference() { return --references; } @@ -225,8 +225,9 @@ // the server instance of the queue manager class ServerQueueManager { + friend class DataQueue; // needs access to the instance lock public: - ServerQueueManager() { ; } + ServerQueueManager() { lock.create(); } void terminateServer(); void addToSessionQueue(ServiceMessage &message); void addToNamedQueue(ServiceMessage &message); @@ -245,35 +246,16 @@ void getNamedQueueCount(ServiceMessage &message); void dispatch(ServiceMessage &message); void cleanupProcessResources(SessionID session); - void deferredPull(APIServer *server, ServiceMessage &message); inline bool isStoppable() { return namedQueues.isEmpty() && sessionQueues.isEmpty(); } + protected: QueueTable namedQueues; // our named queues QueueTable sessionQueues; // the sessions queues + SysMutex lock; // our subsystem lock }; -class APIServer; -class SysServerConnection; - - -class QueueReadThread : public SysThread -{ - -public: - QueueReadThread(APIServer *s, ServerQueueManager *q, SysServerConnection *c, ServiceMessage *m); - - void start(); - virtual void dispatch(); - -protected: - APIServer *server; // the attached API server - ServerQueueManager *manager; // the queue manager instance. - SysServerConnection *connection; // the client connection - ServiceMessage message; // our message contents -}; - #endif Modified: sandbox/rick/rxapi/rexxapi/server/RegistrationManager.hpp =================================================================== --- sandbox/rick/rxapi/rexxapi/server/RegistrationManager.hpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/server/RegistrationManager.hpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -130,7 +130,7 @@ class ServerRegistrationManager { public: - ServerRegistrationManager() { ; } + ServerRegistrationManager() { lock.create(); } void terminateServer(); // It will remove all the registration entries for a specific process void freeProcessRegistrations(SessionID session); @@ -146,6 +146,7 @@ RegistrationTable functions; // our tables for the 2 registration types RegistrationTable exits; RegistrationTable commandHandlers; + SysMutex lock; // our subsystem lock }; #endif Modified: sandbox/rick/rxapi/rexxapi/server/platform/unix/APIService.cpp =================================================================== --- sandbox/rick/rxapi/rexxapi/server/platform/unix/APIService.cpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/server/platform/unix/APIService.cpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -79,7 +79,7 @@ try { apiServer.initServer(); // start up the server - apiServer.processMessages(); // go into the message loop + apiServer.listenForConnections(); // go into the message loop } catch (ServiceException *) { Modified: sandbox/rick/rxapi/rexxapi/server/platform/windows/APIService.cpp =================================================================== --- sandbox/rick/rxapi/rexxapi/server/platform/windows/APIService.cpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rexxapi/server/platform/windows/APIService.cpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -78,7 +78,7 @@ try { apiServer.initServer(); // start up the server - apiServer.processMessages(); // go into the message loop + apiServer.listenForConnections(); // go into the message loop } catch (ServiceException *) { Modified: sandbox/rick/rxapi/rxregexp/rxregexp.mak =================================================================== --- sandbox/rick/rxapi/rxregexp/rxregexp.mak 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/rxregexp/rxregexp.mak 2008-08-03 23:49:39 UTC (rev 2840) @@ -43,7 +43,7 @@ @ECHO All done RXREGEXP.DLL @ECHO. -!include "$(OR_ORYXLSRC)\ORXWIN32.MAK" +!include "$(OR_LIBSRC)\ORXWIN32.MAK" !IFNDEF OR_REGEXPSRC !ERROR Build error, OR_REGEXPSRC not set Modified: sandbox/rick/rxapi/utilities/rxqueue/platform/windows/rxqueue.cpp =================================================================== --- sandbox/rick/rxapi/utilities/rxqueue/platform/windows/rxqueue.cpp 2008-08-03 23:27:05 UTC (rev 2839) +++ sandbox/rick/rxapi/utilities/rxqueue/platform/windows/rxqueue.cpp 2008-08-03 23:49:39 UTC (rev 2840) @@ -68,7 +68,7 @@ static void options_error( /* function called on errors */ int type, - char *queuename ) ; + const char *queuename ) ; /* function to read stdin */ static bool get_line(char *, size_t, size_t *); @@ -170,7 +170,7 @@ /* express in RXSTRING form */ MAKERXSTRING(queuedata, line, linelen); // now write to the named queue - rc = RexxAddQueue(quename, &queuedata, queuemode); + rc = RexxAddQueue(quename, (PCONSTRXSTRING)&queuedata, queuemode); if (rc != RXQUEUE_OK) { options_error(rc, quename); @@ -209,9 +209,9 @@ static void options_error(int type, /* Error type. */ - char *quename ) /* Name of offending queue. */ + const char *quename ) /* Name of offending queue. */ { - LONG rc = 0 ; /* Exit return code. */ + int rc = 0 ; /* Exit return code. */ char DataArea[ 256 ] ; /* Message buffer. */ char DataArea2[ 256 ] ; /* Message buffer. */ int MsgNumber ; /* Message number. */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |