@@ -198,8 +198,8 @@ END OF: CHANGES in CEF since v31..v47.
198198# | cdef cppclass _Object "Object":
199199#
200200# - Supporting operators that are not yet supported:
201- # | CefRefPtr[T] & Assign "operator="(T* p)
202- # | cefBrowser .Assign(CefBrowser *)
201+ # | RetValue & Assign "operator="(T* p)
202+ # | object .Assign(T *)
203203# In the same way you can import function with a different name, this one
204204# imports a static method Create() while adding a prefix "CefSome_":
205205# | cdef extern from "..":
@@ -390,9 +390,14 @@ from cef_types cimport (
390390 int32, uint32, int64, uint64,
391391)
392392
393+ # noinspection PyUnresolvedReferences
394+ from cef_ptr cimport CefRefPtr
395+
396+ # noinspection PyUnresolvedReferences
397+ from cef_scoped_ptr cimport scoped_ptr
398+
393399from cef_task cimport *
394400from cef_platform cimport *
395- from cef_ptr cimport *
396401from cef_app cimport *
397402from cef_browser cimport *
398403# noinspection PyUnresolvedReferences
@@ -428,9 +433,6 @@ from cef_path_util cimport *
428433from cef_drag_data cimport *
429434from cef_image cimport *
430435from main_message_loop cimport *
431- # noinspection PyUnresolvedReferences
432- from cef_scoped_ptr cimport scoped_ptr
433-
434436
435437# -----------------------------------------------------------------------------
436438# GLOBAL VARIABLES
@@ -445,19 +447,19 @@ g_debugFile = "debug.log"
445447g_applicationSettings = {" string_encoding" : " utf-8" }
446448g_commandLineSwitches = {}
447449
450+ # If ApplicationSettings.unique_request_context_per_browser is False
451+ # then a shared request context is used for all browsers. Otherwise
452+ # a unique one is created for each call to CreateBrowserSync.
453+ # noinspection PyUnresolvedReferences
454+ cdef CefRefPtr[CefRequestContext] g_shared_request_context
455+
448456cdef scoped_ptr[MainMessageLoopExternalPump] g_external_message_pump
449457
450458cdef py_bool g_MessageLoop_called = False
451459cdef py_bool g_MessageLoopWork_called = False
452460
453461cdef dict g_globalClientCallbacks = {}
454462
455- # If ApplicationSettings.unique_request_context_per_browser is False
456- # then a shared request context is used for all browsers. Otherwise
457- # a unique one is created for each call to CreateBrowserSync.
458- # noinspection PyUnresolvedReferences
459- cdef CefRefPtr[CefRequestContext] g_sharedRequestContext
460-
461463# -----------------------------------------------------------------------------
462464
463465include " utils.pyx"
@@ -735,7 +737,8 @@ def Initialize(applicationSettings=None, commandLineSwitches=None, **kwargs):
735737 # External message pump
736738 if GetAppSetting(" external_message_pump" )\
737739 and not g_external_message_pump.get():
738- g_external_message_pump.Assign(MainMessageLoopExternalPump.Create())
740+ g_external_message_pump.reset(
741+ MainMessageLoopExternalPump.Create().get())
739742
740743 Debug(" CefInitialize()" )
741744 cdef cpp_bool ret
@@ -786,7 +789,6 @@ def CreateBrowserSync(windowInfo=None,
786789 cdef CefWindowInfo cefWindowInfo
787790 SetCefWindowInfo(cefWindowInfo, windowInfo)
788791
789-
790792 navigateUrl = GetNavigateUrl(navigateUrl)
791793 Debug(" navigateUrl: %s " % navigateUrl)
792794 cdef CefString cefNavigateUrl
@@ -798,7 +800,7 @@ def CreateBrowserSync(windowInfo=None,
798800 cdef CefRefPtr[CefBrowser] cefBrowser
799801
800802 # Request context - part 1/2.
801- createSharedRequestContext = bool (not g_sharedRequestContext .get())
803+ createSharedRequestContext = bool (not g_shared_request_context .get())
802804 cdef CefRefPtr[CefRequestContext] cefRequestContext
803805 cdef CefRefPtr[RequestContextHandler] requestContextHandler = \
804806 < CefRefPtr[RequestContextHandler]?> new RequestContextHandler(
@@ -807,15 +809,13 @@ def CreateBrowserSync(windowInfo=None,
807809 cefRequestContext = CefRequestContext.CreateContext(
808810 CefRequestContext.GetGlobalContext(),
809811 < CefRefPtr[CefRequestContextHandler]?> requestContextHandler)
812+ elif createSharedRequestContext:
813+ cefRequestContext = CefRequestContext.CreateContext(
814+ CefRequestContext.GetGlobalContext(),
815+ < CefRefPtr[CefRequestContextHandler]?> requestContextHandler)
816+ g_shared_request_context.Assign(cefRequestContext.get())
810817 else :
811- if createSharedRequestContext:
812- cefRequestContext = CefRequestContext.CreateContext(
813- CefRequestContext.GetGlobalContext(),
814- < CefRefPtr[CefRequestContextHandler]?> \
815- requestContextHandler)
816- g_sharedRequestContext.Assign(cefRequestContext.get())
817- else :
818- cefRequestContext.Assign(g_sharedRequestContext.get())
818+ cefRequestContext.Assign(g_shared_request_context.get())
819819
820820 # CEF browser creation.
821821 with nogil:
@@ -881,11 +881,12 @@ def QuitMessageLoop():
881881 CefQuitMessageLoop()
882882
883883def Shutdown ():
884- if g_sharedRequestContext.get():
885- # A similar release is done in RemovePyBrowser and CloseBrowser.
886- # This one is probably redundant. Additional testing should be done.
887- Debug(" Shutdown: releasing shared request context" )
888- g_sharedRequestContext.Assign(NULL )
884+ Debug(" Shutdown()" )
885+
886+ # Release shared request context. This is sometimes causing
887+ # segmentation fault, so disabling it for now. See Issue #333:
888+ # https://github.com/cztomczak/cefpython/issues/333
889+ # OFF: g_shared_request_context.Assign(NULL)
889890
890891 # Run some message loop work, force closing browsers and then run
891892 # some message loop work again for the browsers to close cleanly.
@@ -968,7 +969,7 @@ def Shutdown():
968969 NonCriticalError(" Shutdown called, but there are still browser"
969970 " references alive" )
970971
971- Debug(" Shutdown ()" )
972+ Debug(" CefShutdown ()" )
972973 with nogil:
973974 CefShutdown()
974975
0 commit comments