git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1243 0c269be4-1314-0410-8aa9-9f06e86f4224tags/0.59
| @@ -2,6 +2,10 @@ | |||||
| Jackdmp changes log | Jackdmp changes log | ||||
| --------------------------- | --------------------------- | ||||
| 2006-09-20 Stephane Letz <letz@grame.fr> | |||||
| * On Windows, avoid to use the unsafe Kill thread method. Use thread Stop instead and have blocked IO be unlocked. | |||||
| 2006-09-16 Stephane Letz <letz@grame.fr> | 2006-09-16 Stephane Letz <letz@grame.fr> | ||||
| * Restore behaviour of LoopBack driver, which has to be opened in any case... | * Restore behaviour of LoopBack driver, which has to be opened in any case... | ||||
| @@ -22,6 +26,7 @@ | |||||
| 2006-09-06 Stephane Letz <letz@grame.fr> | 2006-09-06 Stephane Letz <letz@grame.fr> | ||||
| * Correct coreaudio driver (input was not working since 0.55 version). | * Correct coreaudio driver (input was not working since 0.55 version). | ||||
| * Version for 0.58 release. | |||||
| 2006-09-04 Stephane Letz <letz@grame.fr> | 2006-09-04 Stephane Letz <letz@grame.fr> | ||||
| @@ -29,4 +34,4 @@ | |||||
| 2006-09-03 Stephane Letz <letz@grame.fr> | 2006-09-03 Stephane Letz <letz@grame.fr> | ||||
| * First import of version 0.58 code | |||||
| * First import of version 0.58 base code | |||||
| @@ -188,8 +188,8 @@ int JackClient::ClientNotify(int refnum, const char* name, int notify, int sync, | |||||
| res = fXrun(fXrunArg); | res = fXrun(fXrunArg); | ||||
| break; | break; | ||||
| case JackNotifyChannelInterface::kZombifyClient: | |||||
| res = fThread->Kill(); | |||||
| case JackNotifyChannelInterface::kZombifyClient: | |||||
| //res = fThread->Kill(); Really neede ?? Unsafe in WIN32... | |||||
| JackLog("JackClient::kZombifyClient name = %s ref = %ld \n", name, refnum); | JackLog("JackClient::kZombifyClient name = %s ref = %ld \n", name, refnum); | ||||
| ShutDown(); | ShutDown(); | ||||
| break; | break; | ||||
| @@ -207,10 +207,16 @@ int JackClient::Activate() | |||||
| { | { | ||||
| JackLog("JackClient::Activate \n"); | JackLog("JackClient::Activate \n"); | ||||
| if (IsActive()) | if (IsActive()) | ||||
| return 0; | |||||
| if (StartThread() < 0) | |||||
| return -1; | |||||
| return 0; | |||||
| // Done first so that the RT thread then access an allocated synchro | |||||
| if (!fSynchroTable[GetClientControl()->fRefNum]->Connect(GetClientControl()->fName)) { | |||||
| jack_error("Cannot ConnectSemaphore %s client", GetClientControl()->fName); | |||||
| return -1; | |||||
| } | |||||
| if (StartThread() < 0) | |||||
| return -1; | |||||
| int result = -1; | int result = -1; | ||||
| fChannel->ClientActivate(GetClientControl()->fRefNum, &result); | fChannel->ClientActivate(GetClientControl()->fRefNum, &result); | ||||
| @@ -242,7 +248,13 @@ int JackClient::Deactivate() | |||||
| JackLog("JackClient::Deactivate res = %ld \n", result); | JackLog("JackClient::Deactivate res = %ld \n", result); | ||||
| // We need to wait for the new engine cycle before stopping the RT thread, but this is done by ClientDeactivate | // We need to wait for the new engine cycle before stopping the RT thread, but this is done by ClientDeactivate | ||||
| fThread->Kill(); | |||||
| // steph | |||||
| fSynchroTable[GetClientControl()->fRefNum]->Disconnect(); | |||||
| fThread->Stop(); | |||||
| //fThread->Kill(); | |||||
| return result; | return result; | ||||
| } | } | ||||
| @@ -747,8 +747,10 @@ const char** JackGraphManager::GetPorts(const char* port_name_pattern, const cha | |||||
| do { | do { | ||||
| cur_index = GetCurrentIndex(); | cur_index = GetCurrentIndex(); | ||||
| if (matching_ports) | |||||
| free(matching_ports); | |||||
| if (matching_ports) { | |||||
| free(matching_ports); | |||||
| JackLog("JackGraphManager::GetPorts retry... \n"); | |||||
| } | |||||
| matching_ports = GetPortsAux(port_name_pattern, type_name_pattern, flags); | matching_ports = GetPortsAux(port_name_pattern, type_name_pattern, flags); | ||||
| next_index = GetCurrentIndex(); | next_index = GetCurrentIndex(); | ||||
| } while (cur_index != next_index); // Until a coherent state has been read | } while (cur_index != next_index); // Until a coherent state has been read | ||||
| @@ -99,10 +99,12 @@ int JackLibClient::Open(const char* name) | |||||
| SetupDriverSync(false); | SetupDriverSync(false); | ||||
| // Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process | // Connect shared synchro : the synchro must be usable in I/O mode when several clients live in the same process | ||||
| if (!fSynchroTable[fClientControl->fRefNum]->Connect(name)) { | |||||
| /* | |||||
| if (!fSynchroTable[fClientControl->fRefNum]->Connect(name)) { | |||||
| jack_error("Cannot ConnectSemaphore %s client", name); | jack_error("Cannot ConnectSemaphore %s client", name); | ||||
| goto error; | goto error; | ||||
| } | |||||
| } | |||||
| */ | |||||
| JackLog("JackLibClient::Open name = %s refnum = %ld\n", name, fClientControl->fRefNum); | JackLog("JackLibClient::Open name = %s refnum = %ld\n", name, fClientControl->fRefNum); | ||||
| return 0; | return 0; | ||||
| @@ -114,7 +114,8 @@ bool JackWinEvent::ConnectOutput(const char* name) | |||||
| bool JackWinEvent::Disconnect() | bool JackWinEvent::Disconnect() | ||||
| { | { | ||||
| if (fEvent) { | if (fEvent) { | ||||
| JackLog("JackWinEvent::Disconnect %s\n", fName); | |||||
| JackLog("JackWinEvent::Disconnect %s\n", fName); | |||||
| SetEvent(fEvent); // to "unlock" threads pending on the event | |||||
| CloseHandle(fEvent); | CloseHandle(fEvent); | ||||
| fEvent = NULL; | fEvent = NULL; | ||||
| return true; | return true; | ||||
| @@ -284,8 +284,10 @@ bool JackWinNamedPipeServer::Accept() | |||||
| JackWinNamedPipeClient* JackWinNamedPipeServer::AcceptClient() | JackWinNamedPipeClient* JackWinNamedPipeServer::AcceptClient() | ||||
| { | { | ||||
| if (ConnectNamedPipe(fNamedPipe, NULL)) { | |||||
| return new JackWinNamedPipeClient(fNamedPipe); | |||||
| if (ConnectNamedPipe(fNamedPipe, NULL)) { | |||||
| JackWinNamedPipeClient* client = new JackWinNamedPipeClient(fNamedPipe); | |||||
| // Init the pipe to the default value | |||||
| fNamedPipe = INVALID_HANDLE_VALUE; | |||||
| } else { | } else { | ||||
| switch (GetLastError()) { | switch (GetLastError()) { | ||||
| @@ -302,8 +304,10 @@ JackWinNamedPipeClient* JackWinNamedPipeServer::AcceptClient() | |||||
| int JackWinNamedPipeServer::Close() | int JackWinNamedPipeServer::Close() | ||||
| { | { | ||||
| if (fNamedPipe != INVALID_HANDLE_VALUE) { | |||||
| DisconnectNamedPipe(fNamedPipe); | |||||
| JackLog("JackWinNamedPipeServer::Close\n"); | |||||
| if (fNamedPipe != INVALID_HANDLE_VALUE) { | |||||
| DisconnectNamedPipe(fNamedPipe); | |||||
| CloseHandle(fNamedPipe); | CloseHandle(fNamedPipe); | ||||
| fNamedPipe = INVALID_HANDLE_VALUE; | fNamedPipe = INVALID_HANDLE_VALUE; | ||||
| return 0; | return 0; | ||||
| @@ -62,7 +62,9 @@ error: | |||||
| void JackWinNamedPipeClientChannel::Close() | void JackWinNamedPipeClientChannel::Close() | ||||
| { | { | ||||
| fRequestPipe.Close(); | fRequestPipe.Close(); | ||||
| fNotificationListenPipe.Close(); | |||||
| fNotificationListenPipe.Close(); | |||||
| // Here the thread will correctly stop when the pipe are closed | |||||
| fThread->Stop(); | |||||
| } | } | ||||
| int JackWinNamedPipeClientChannel::Start() | int JackWinNamedPipeClientChannel::Start() | ||||
| @@ -80,7 +82,7 @@ int JackWinNamedPipeClientChannel::Start() | |||||
| void JackWinNamedPipeClientChannel::Stop() | void JackWinNamedPipeClientChannel::Stop() | ||||
| { | { | ||||
| JackLog("JackWinNamedPipeClientChannel::Stop\n"); | JackLog("JackWinNamedPipeClientChannel::Stop\n"); | ||||
| fThread->Kill(); | |||||
| //fThread->Kill(); Unsafe on WIN32... | |||||
| } | } | ||||
| void JackWinNamedPipeClientChannel::ServerSyncCall(JackRequest* req, JackResult* res, int* result) | void JackWinNamedPipeClientChannel::ServerSyncCall(JackRequest* req, JackResult* res, int* result) | ||||
| @@ -248,8 +250,9 @@ bool JackWinNamedPipeClientChannel::Execute() | |||||
| } | } | ||||
| return true; | return true; | ||||
| error: | |||||
| fClient->ShutDown(); | |||||
| error: | |||||
| //fClient->ShutDown(); needed ?? | |||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -43,7 +43,8 @@ JackClientPipeThread::JackClientPipeThread(JackWinNamedPipeClient* pipe) | |||||
| } | } | ||||
| JackClientPipeThread::~JackClientPipeThread() | JackClientPipeThread::~JackClientPipeThread() | ||||
| { | |||||
| { | |||||
| JackLog("JackClientPipeThread::~JackClientPipeThread\n"); | |||||
| delete fPipe; | delete fPipe; | ||||
| delete fThread; | delete fThread; | ||||
| } | } | ||||
| @@ -62,10 +63,18 @@ int JackClientPipeThread::Open(JackServer* server) // Open the Server/Client con | |||||
| } | } | ||||
| void JackClientPipeThread::Close() // Close the Server/Client connection | void JackClientPipeThread::Close() // Close the Server/Client connection | ||||
| { | |||||
| { | |||||
| JackLog("JackClientPipeThread::Close %x %ld\n", this, fRefNum); | |||||
| /* | |||||
| This would hang.. since Close will be followed by a delete, | |||||
| all ressources will be desallocated at the end. | |||||
| */ | |||||
| /* | |||||
| fThread->Kill(); | fThread->Kill(); | ||||
| fPipe->Close(); | |||||
| fRefNum = -1; | |||||
| fPipe->Close(); | |||||
| */ | |||||
| fRefNum = -1; | |||||
| } | } | ||||
| bool JackClientPipeThread::Execute() | bool JackClientPipeThread::Execute() | ||||
| @@ -111,7 +120,8 @@ int JackClientPipeThread::HandleRequest() | |||||
| if (req.Read(fPipe) == 0) | if (req.Read(fPipe) == 0) | ||||
| res.fResult = fServer->GetEngine()->ClientClose(req.fRefNum); | res.fResult = fServer->GetEngine()->ClientClose(req.fRefNum); | ||||
| res.Write(fPipe); | res.Write(fPipe); | ||||
| RemoveClient(); | |||||
| RemoveClient(); | |||||
| ret = -1; | |||||
| break; | break; | ||||
| } | } | ||||
| @@ -257,21 +267,20 @@ int JackClientPipeThread::HandleRequest() | |||||
| void JackClientPipeThread::AddClient(char* name, int* shared_engine, int* shared_client, int* shared_ports, int* result) | void JackClientPipeThread::AddClient(char* name, int* shared_engine, int* shared_client, int* shared_ports, int* result) | ||||
| { | { | ||||
| JackLog("JackWinNamedPipeServerChannel::AddClient %s\n", name); | |||||
| JackLog("JackClientPipeThread::AddClient %s\n", name); | |||||
| fRefNum = -1; | fRefNum = -1; | ||||
| *result = fServer->GetEngine()->ClientNew(name, &fRefNum, shared_engine, shared_client, shared_ports); | *result = fServer->GetEngine()->ClientNew(name, &fRefNum, shared_engine, shared_client, shared_ports); | ||||
| } | } | ||||
| void JackClientPipeThread::RemoveClient() | void JackClientPipeThread::RemoveClient() | ||||
| { | { | ||||
| JackLog("JackWinNamedPipeServerChannel::RemoveClient ref = %d\n", fRefNum); | |||||
| JackLog("JackClientPipeThread::RemoveClient ref = %d\n", fRefNum); | |||||
| Close(); | Close(); | ||||
| } | } | ||||
| void JackClientPipeThread::KillClient() | void JackClientPipeThread::KillClient() | ||||
| { | { | ||||
| JackLog("JackClientPipeThread::KillClient \n"); | |||||
| JackLog("JackWinNamedPipeServerChannel::KillClient ref = %d\n", fRefNum); | |||||
| JackLog("JackClientPipeThread::KillClient ref = %d\n", fRefNum); | |||||
| if (fRefNum == -1) { // Correspond to an already removed client. | if (fRefNum == -1) { // Correspond to an already removed client. | ||||
| JackLog("Kill a closed client\n"); | JackLog("Kill a closed client\n"); | ||||
| @@ -290,7 +299,15 @@ JackWinNamedPipeServerChannel::JackWinNamedPipeServerChannel() | |||||
| } | } | ||||
| JackWinNamedPipeServerChannel::~JackWinNamedPipeServerChannel() | JackWinNamedPipeServerChannel::~JackWinNamedPipeServerChannel() | ||||
| { | |||||
| { | |||||
| std::list<JackClientPipeThread*>::iterator it; | |||||
| for (it = fClientList.begin(); it != fClientList.end(); it++) { | |||||
| JackClientPipeThread* client = *it; | |||||
| client->Close(); | |||||
| delete client; | |||||
| } | |||||
| delete fThread; | delete fThread; | ||||
| } | } | ||||
| @@ -318,12 +335,19 @@ error: | |||||
| fRequestListenPipe.Close(); | fRequestListenPipe.Close(); | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| void JackWinNamedPipeServerChannel::Close() | |||||
| { | |||||
| fThread->Kill(); | |||||
| fRequestListenPipe.Close(); | |||||
| } | |||||
| void JackWinNamedPipeServerChannel::Close() | |||||
| { | |||||
| /* | |||||
| This would hang the server... since we are quitting it, its not really problematic, | |||||
| all ressources will be desallocated at the end. | |||||
| */ | |||||
| /* | |||||
| fRequestListenPipe.Close(); | |||||
| fThread->Stop(); | |||||
| */ | |||||
| } | |||||
| bool JackWinNamedPipeServerChannel::Init() | bool JackWinNamedPipeServerChannel::Init() | ||||
| { | { | ||||
| @@ -355,31 +379,34 @@ bool JackWinNamedPipeServerChannel::Execute() | |||||
| } | } | ||||
| AddClient(pipe); | AddClient(pipe); | ||||
| return true; | |||||
| } | |||||
| void JackWinNamedPipeServerChannel::AddClient(JackWinNamedPipeClient* pipe) | |||||
| { | |||||
| // Remove dead (= not running anymore) clients. | |||||
| std::list<JackClientPipeThread*>::iterator it = fClientList.begin(); | |||||
| JackClientPipeThread* client; | |||||
| while (it != fClientList.end()) { | |||||
| client = *it; | |||||
| if (client->IsRunning()) { | |||||
| it++; | |||||
| } else { | |||||
| JackLog("Remove client from list\n"); | |||||
| it = fClientList.erase(it); | |||||
| delete(client); | |||||
| } | |||||
| } | |||||
| client = new JackClientPipeThread(pipe); | |||||
| client->Open(fServer); | |||||
| // Here we are sure that the client is running (because it's thread is in "running" state). | |||||
| fClientList.push_back(client); | |||||
| } | |||||
| } // end of namespace | |||||
| return true; | |||||
| } | |||||
| void JackWinNamedPipeServerChannel::AddClient(JackWinNamedPipeClient* pipe) | |||||
| { | |||||
| // Remove dead (= not running anymore) clients. | |||||
| std::list<JackClientPipeThread*>::iterator it = fClientList.begin(); | |||||
| JackClientPipeThread* client; | |||||
| JackLog("AddClient size %ld\n", fClientList.size()); | |||||
| while (it != fClientList.end()) { | |||||
| client = *it; | |||||
| JackLog("Remove dead client = %x running = %ld\n", client, client->IsRunning()); | |||||
| if (client->IsRunning()) { | |||||
| it++; | |||||
| } else { | |||||
| it = fClientList.erase(it); | |||||
| delete client; | |||||
| } | |||||
| } | |||||
| client = new JackClientPipeThread(pipe); | |||||
| client->Open(fServer); | |||||
| // Here we are sure that the client is running (because it's thread is in "running" state). | |||||
| fClientList.push_back(client); | |||||
| } | |||||
| } // end of namespace | |||||
| @@ -167,9 +167,10 @@ int JackWinThread::StartSync() | |||||
| int JackWinThread::Kill() | int JackWinThread::Kill() | ||||
| { | { | ||||
| if (fThread) { // If thread has been started | if (fThread) { // If thread has been started | ||||
| JackLog("JackWinThread::Kill\n"); | |||||
| TerminateThread(fThread, 0); /// TO CHECK : dangerous | |||||
| CloseHandle(fThread); | |||||
| TerminateThread(fThread, 0); | |||||
| WaitForSingleObject(fThread, INFINITE); | |||||
| CloseHandle(fThread); | |||||
| JackLog("JackWinThread::Kill 2\n"); | |||||
| fThread = NULL; | fThread = NULL; | ||||
| fRunning = false; | fRunning = false; | ||||
| return 0; | return 0; | ||||
| @@ -204,6 +204,48 @@ static void jack_cleanup_files (const char *server_name) | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| */ | |||||
| /* | |||||
| BOOL CtrlHandler( DWORD fdwCtrlType ) | |||||
| { | |||||
| switch( fdwCtrlType ) | |||||
| { | |||||
| // Handle the CTRL-C signal. | |||||
| case CTRL_C_EVENT: | |||||
| printf( "Ctrl-C event\n\n" ); | |||||
| Beep( 750, 300 ); | |||||
| SetEvent(waitEvent); | |||||
| return( TRUE ); | |||||
| // CTRL-CLOSE: confirm that the user wants to exit. | |||||
| case CTRL_CLOSE_EVENT: | |||||
| Beep( 600, 200 ); | |||||
| printf( "Ctrl-Close event\n\n" ); | |||||
| SetEvent(waitEvent); | |||||
| return( TRUE ); | |||||
| // Pass other signals to the next handler. | |||||
| case CTRL_BREAK_EVENT: | |||||
| Beep( 900, 200 ); | |||||
| printf( "Ctrl-Break event\n\n" ); | |||||
| return FALSE; | |||||
| case CTRL_LOGOFF_EVENT: | |||||
| Beep( 1000, 200 ); | |||||
| printf( "Ctrl-Logoff event\n\n" ); | |||||
| return FALSE; | |||||
| case CTRL_SHUTDOWN_EVENT: | |||||
| Beep( 750, 500 ); | |||||
| printf( "Ctrl-Shutdown event\n\n" ); | |||||
| return FALSE; | |||||
| default: | |||||
| return FALSE; | |||||
| } | |||||
| } | |||||
| */ | */ | ||||
| int main(int argc, char* argv[]) | int main(int argc, char* argv[]) | ||||
| @@ -324,19 +366,22 @@ int main(int argc, char* argv[]) | |||||
| if (!seen_driver) { | if (!seen_driver) { | ||||
| usage (stderr); | usage (stderr); | ||||
| exit (1); | |||||
| //exit (1); | |||||
| return 0; | |||||
| } | } | ||||
| drivers = jack_drivers_load (drivers); | drivers = jack_drivers_load (drivers); | ||||
| if (!drivers) { | if (!drivers) { | ||||
| fprintf (stderr, "jackdmp: no drivers found; exiting\n"); | fprintf (stderr, "jackdmp: no drivers found; exiting\n"); | ||||
| exit (1); | |||||
| //exit (1); | |||||
| return 0; | |||||
| } | } | ||||
| driver_desc = jack_find_driver_descriptor (drivers, driver_name); | driver_desc = jack_find_driver_descriptor (drivers, driver_name); | ||||
| if (!driver_desc) { | if (!driver_desc) { | ||||
| fprintf (stderr, "jackdmp: unknown driver '%s'\n", driver_name); | fprintf (stderr, "jackdmp: unknown driver '%s'\n", driver_name); | ||||
| exit (1); | |||||
| //exit (1); | |||||
| return 0; | |||||
| } | } | ||||
| if (optind < argc) { | if (optind < argc) { | ||||
| @@ -360,7 +405,8 @@ int main(int argc, char* argv[]) | |||||
| if (jack_parse_driver_params (driver_desc, driver_nargs, | if (jack_parse_driver_params (driver_desc, driver_nargs, | ||||
| driver_args, &driver_params)) { | driver_args, &driver_params)) { | ||||
| exit (0); | |||||
| // exit (0); | |||||
| return 0; | |||||
| } | } | ||||
| //if (server_name == NULL) | //if (server_name == NULL) | ||||
| @@ -372,13 +418,16 @@ int main(int argc, char* argv[]) | |||||
| switch (rc) { | switch (rc) { | ||||
| case EEXIST: | case EEXIST: | ||||
| fprintf (stderr, "`%s' server already active\n", server_name); | fprintf (stderr, "`%s' server already active\n", server_name); | ||||
| exit (1); | |||||
| //exit (1); | |||||
| return 0; | |||||
| case ENOSPC: | case ENOSPC: | ||||
| fprintf (stderr, "too many servers already active\n"); | fprintf (stderr, "too many servers already active\n"); | ||||
| exit (2); | |||||
| //exit (2); | |||||
| return 0; | |||||
| case ENOMEM: | case ENOMEM: | ||||
| fprintf (stderr, "no access to shm registry\n"); | fprintf (stderr, "no access to shm registry\n"); | ||||
| exit (3); | |||||
| //exit (3); | |||||
| return 0; | |||||
| default: | default: | ||||
| if (xverbose) | if (xverbose) | ||||
| fprintf (stderr, "server `%s' registered\n", | fprintf (stderr, "server `%s' registered\n", | ||||
| @@ -401,8 +450,19 @@ int main(int argc, char* argv[]) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| /* | |||||
| if( SetConsoleCtrlHandler( (PHANDLER_ROUTINE) CtrlHandler, TRUE ) ) | |||||
| { | |||||
| printf( "\nThe Control Handler is installed.\n" ); | |||||
| } else { | |||||
| printf( "\nERROR: Could not set control handler"); | |||||
| } | |||||
| */ | |||||
| (void) signal(SIGINT, intrpt); | (void) signal(SIGINT, intrpt); | ||||
| (void) signal(SIGABRT, intrpt); | |||||
| (void) signal(SIGTERM, intrpt); | |||||
| if ((res = WaitForSingleObject(waitEvent, INFINITE)) != WAIT_OBJECT_0) { | if ((res = WaitForSingleObject(waitEvent, INFINITE)) != WAIT_OBJECT_0) { | ||||
| printf("WaitForSingleObject fails err = %ld\n", GetLastError()); | printf("WaitForSingleObject fails err = %ld\n", GetLastError()); | ||||
| @@ -411,7 +471,8 @@ int main(int argc, char* argv[]) | |||||
| /* | /* | ||||
| printf("Type 'q' to quit\n"); | printf("Type 'q' to quit\n"); | ||||
| while ((c = getchar()) != 'q') {} | while ((c = getchar()) != 'q') {} | ||||
| */ | |||||
| */ | |||||
| JackStop(); | JackStop(); | ||||
| @@ -108,6 +108,28 @@ SOURCE="..\example-clients\metro.c" | |||||
| # Begin Source File | # Begin Source File | ||||
| SOURCE=.\Release\libjackmp.lib | SOURCE=.\Release\libjackmp.lib | ||||
| !IF "$(CFG)" == "jack_metro - Win32 Release" | |||||
| !ELSEIF "$(CFG)" == "jack_metro - Win32 Debug" | |||||
| # PROP Exclude_From_Build 1 | |||||
| !ENDIF | |||||
| # End Source File | |||||
| # Begin Source File | |||||
| SOURCE=.\Debug\libjackmp_debug.lib | |||||
| !IF "$(CFG)" == "jack_metro - Win32 Release" | |||||
| # PROP Exclude_From_Build 1 | |||||
| !ELSEIF "$(CFG)" == "jack_metro - Win32 Debug" | |||||
| !ENDIF | |||||
| # End Source File | # End Source File | ||||
| # End Target | # End Target | ||||
| # End Project | # End Project | ||||
| @@ -122,6 +122,15 @@ SOURCE=.\Release\libjackdmp.lib | |||||
| # Begin Source File | # Begin Source File | ||||
| SOURCE=.\Debug\libjackdmp_debug.lib | SOURCE=.\Debug\libjackdmp_debug.lib | ||||
| !IF "$(CFG)" == "jackdmp - Win32 Release" | |||||
| # PROP Exclude_From_Build 1 | |||||
| !ELSEIF "$(CFG)" == "jackdmp - Win32 Debug" | |||||
| !ENDIF | |||||
| # End Source File | # End Source File | ||||
| # End Target | # End Target | ||||
| # End Project | # End Project | ||||
| @@ -42,7 +42,7 @@ RSC=rc.exe | |||||
| # PROP Intermediate_Dir "Release" | # PROP Intermediate_Dir "Release" | ||||
| # PROP Target_Dir "" | # PROP Target_Dir "" | ||||
| # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKDMP_EXPORTS" /YX /FD /c | # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKDMP_EXPORTS" /YX /FD /c | ||||
| # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKDMP_EXPORTS" /D "__STDC__" /D "REGEX_MALLOC" /D "STDC_HEADERS" /D "__SMP__" /YX /FD /c | |||||
| # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKDMP_EXPORTS" /D "__STDC__" /D "REGEX_MALLOC" /D "STDC_HEADERS" /D "__SMP__" /FR /YX /FD /c | |||||
| # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| # ADD BASE RSC /l 0x40c /d "NDEBUG" | # ADD BASE RSC /l 0x40c /d "NDEBUG" | ||||
| @@ -241,6 +241,10 @@ SOURCE=.\resource.rc | |||||
| SOURCE=..\common\shm.c | SOURCE=..\common\shm.c | ||||
| # End Source File | # End Source File | ||||
| # Begin Source File | |||||
| SOURCE="..\..\..\..\pthreads-win32\pthreadVC2.lib" | |||||
| # End Source File | |||||
| # End Group | # End Group | ||||
| # Begin Group "Header Files" | # Begin Group "Header Files" | ||||
| @@ -42,7 +42,7 @@ RSC=rc.exe | |||||
| # PROP Intermediate_Dir "Release" | # PROP Intermediate_Dir "Release" | ||||
| # PROP Target_Dir "" | # PROP Target_Dir "" | ||||
| # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKMP_EXPORTS" /YX /FD /c | # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKMP_EXPORTS" /YX /FD /c | ||||
| # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKMP_EXPORTS" /D "__STDC__" /D "REGEX_MALLOC" /D "STDC_HEADERS" /D "__SMP__" /YX /FD /c | |||||
| # ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common" /I "../../../../pthreads-win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBJACKMP_EXPORTS" /D "__STDC__" /D "REGEX_MALLOC" /D "STDC_HEADERS" /D "__SMP__" /YX /FD /c | |||||
| # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 | ||||
| # ADD BASE RSC /l 0x40c /d "NDEBUG" | # ADD BASE RSC /l 0x40c /d "NDEBUG" | ||||
| @@ -186,5 +186,9 @@ SOURCE=..\common\shm.c | |||||
| # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" | # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" | ||||
| # End Group | # End Group | ||||
| # Begin Source File | |||||
| SOURCE="..\..\..\..\pthreads-win32\pthreadVC2.lib" | |||||
| # End Source File | |||||
| # End Target | # End Target | ||||
| # End Project | # End Project | ||||