1 - Ported some of IPV6 code to 1.6.7.
2 - Backport of svn revision 527: * Added API to ithread, created the following functions: - int ithread_initialize_library(void); - int ithread_cleanup_library(void); - int ithread_initialize_thread(void); - int ithread_cleanup_thread(void); * SF Bug Tracker [ 2876374 ] Access Violation when compiling with Visual Studio 2008 Submitted: Stulle ( stulleamgym ) - 2009-10-10 19:05 Hi, I am one of the devs of the MorphXT project and I use this lib in some other of my projects, too. When I tried to upgrade the lib earlier for one of my projects I had to realise that something did not work at first and while most of the things were reasonably ease to be fixed. Now, the last thing I encountered was not so easy to fix and I am uncertain if my fix is any good so I'll just post it here and wait for some comments. The problem was that I got an Access Violation when calling "UpnpInit". It would call "ithread_rwlock_init(&GlobalHndRWLock, NULL)" which eventually led to calling "pthread_cond_init" and I got the error notice at "EnterCriticalSection (&ptw32_cond_list_lock);". It appeared that "ptw32_cond_list_lock" was NULL. Now, I found two ways to fix this. Firstly moving the whole block after at least one of the "ThreadPoolInit" calls will fix the issue. Secondly, you could add: #ifdef WIN32 #ifdef PTW32_STATIC_LIB // to get the following working we need this... is it a good patch or not... I do not know! pthread_win32_process_attach_np(); #endif #endif right before "ithread_rwlock_init(&GlobalHndRWLock, NULL)". Just so you know, I am using libupnp 1.6.6 and libpthreads 2.8.0 and both are linked static into the binaries. I am currently using Visual Studio 2008 for development with Windows being the target OS. Any comment at your end? Regards, Stulle git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/branches/branch-1.6.x@529 119443c7-1b9e-41f8-b6fc-b9c35fce742c
This commit is contained in:
@@ -127,7 +127,7 @@ static int ScheduleGenaAutoRenew(
|
||||
/*! [in] The time out value of the subscription. */
|
||||
IN int TimeOut,
|
||||
/*! [in] Subscription being renewed. */
|
||||
IN client_subscription *sub)
|
||||
IN ClientSubscription *sub)
|
||||
{
|
||||
struct Upnp_Event_Subscribe *RenewEventStruct = NULL;
|
||||
upnp_timeout *RenewEvent = NULL;
|
||||
@@ -300,14 +300,24 @@ static int gena_subscribe(
|
||||
"TIMEOUT: Second-", timeout_str );
|
||||
} else {
|
||||
// subscribe
|
||||
if( dest_url.hostport.IPaddress.ss_family == AF_INET6 ) {
|
||||
return_code = http_MakeMessage(
|
||||
&request, 1, 1,
|
||||
"q" "sssdsc" "sc" "sscc",
|
||||
HTTPMETHOD_SUBSCRIBE, &dest_url,
|
||||
"CALLBACK: <http://", LOCAL_HOST, ":", LOCAL_PORT, "/>",
|
||||
"CALLBACK: <http://[", gIF_IPV6, "]:", LOCAL_PORT_V6, "/>",
|
||||
"NT: upnp:event",
|
||||
"TIMEOUT: Second-", timeout_str );
|
||||
} else {
|
||||
return_code = http_MakeMessage(
|
||||
&request, 1, 1,
|
||||
"q" "sssdsc" "sc" "sscc",
|
||||
HTTPMETHOD_SUBSCRIBE, &dest_url,
|
||||
"CALLBACK: <http://", gIF_IPV4, ":", LOCAL_PORT_V4, "/>",
|
||||
"NT: upnp:event",
|
||||
"TIMEOUT: Second-", timeout_str);
|
||||
}
|
||||
}
|
||||
if (return_code != 0) {
|
||||
return return_code;
|
||||
}
|
||||
@@ -368,7 +378,7 @@ static int gena_subscribe(
|
||||
|
||||
int genaUnregisterClient(UpnpClient_Handle client_handle)
|
||||
{
|
||||
client_subscription sub_copy;
|
||||
ClientSubscription sub_copy;
|
||||
int return_code = UPNP_E_SUCCESS;
|
||||
struct Handle_Info *handle_info = NULL;
|
||||
http_parser_t response;
|
||||
@@ -413,10 +423,10 @@ int genaUnSubscribe(
|
||||
UpnpClient_Handle client_handle,
|
||||
const Upnp_SID in_sid)
|
||||
{
|
||||
client_subscription *sub = NULL;
|
||||
ClientSubscription *sub = NULL;
|
||||
int return_code = GENA_SUCCESS;
|
||||
struct Handle_Info *handle_info;
|
||||
client_subscription sub_copy;
|
||||
ClientSubscription sub_copy;
|
||||
http_parser_t response;
|
||||
|
||||
// validate handle and sid
|
||||
@@ -467,7 +477,7 @@ int genaSubscribe(
|
||||
Upnp_SID out_sid)
|
||||
{
|
||||
int return_code = GENA_SUCCESS;
|
||||
client_subscription *newSubscription = NULL;
|
||||
ClientSubscription *newSubscription = NULL;
|
||||
uuid_upnp uid;
|
||||
Upnp_SID temp_sid;
|
||||
char *ActualSID = NULL;
|
||||
@@ -517,7 +527,7 @@ int genaSubscribe(
|
||||
strcpy( EventURL, PublisherURL );
|
||||
|
||||
// fill subscription
|
||||
newSubscription = (client_subscription *)malloc(sizeof (client_subscription));
|
||||
newSubscription = (ClientSubscription *)malloc(sizeof (ClientSubscription));
|
||||
if (newSubscription == NULL) {
|
||||
return_code = UPNP_E_OUTOF_MEMORY;
|
||||
goto error_handler;
|
||||
@@ -552,8 +562,8 @@ int genaRenewSubscription(
|
||||
int *TimeOut)
|
||||
{
|
||||
int return_code = GENA_SUCCESS;
|
||||
client_subscription *sub = NULL;
|
||||
client_subscription sub_copy;
|
||||
ClientSubscription *sub = NULL;
|
||||
ClientSubscription sub_copy;
|
||||
struct Handle_Info *handle_info;
|
||||
char *ActualSID;
|
||||
ThreadPoolJob tempJob;
|
||||
@@ -657,7 +667,7 @@ void gena_process_notification_event(
|
||||
IXML_Document *ChangedVars = NULL;
|
||||
int eventKey;
|
||||
token sid;
|
||||
client_subscription *subscription = NULL;
|
||||
ClientSubscription *subscription = NULL;
|
||||
struct Handle_Info *handle_info;
|
||||
void *cookie;
|
||||
Upnp_FunPtr callback;
|
||||
|
||||
Reference in New Issue
Block a user