Fix for a crash while importing calendar items [exchange calendar]

pchenthill <[email protected]>
Newsgroups gmane.comp.gnome.evolution.patches
Message-ID <[email protected]>
Hi,
   Have attached the fix for the bug. Notify for authentication only
when the mode changes from offline to online.

thanks, Chenthill.

_______________________________________________
Evolution-patches mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/evolution-patches
ex.diff (text/x-patch, 1.7 KB)
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-exchange/ChangeLog,v
retrieving revision 1.478
diff -u -p -r1.478 ChangeLog
--- ChangeLog	6 Mar 2006 09:27:05 -0000	1.478
+++ ChangeLog	6 Mar 2006 10:44:52 -0000
@@ -1,3 +1,10 @@
+2006-03-06  Chenthill Palanisamy  <[email protected]>
+
+	Fixes a crash.
+	* calendar/e-cal-backend-exchange.c:
+	(set_mode): Notify the client to authenticate only when
+	the mode is changed from offline to online.
+
 2006-03-06  Sushma Rai  <[email protected]>
 
 	* po/POTFILES.in : Removed the non existing files. 
Index: calendar/e-cal-backend-exchange.c
===================================================================
RCS file: /cvs/gnome/evolution-exchange/calendar/e-cal-backend-exchange.c,v
retrieving revision 1.63
diff -u -p -r1.63 e-cal-backend-exchange.c
--- calendar/e-cal-backend-exchange.c	4 Mar 2006 10:17:41 -0000	1.63
+++ calendar/e-cal-backend-exchange.c	6 Mar 2006 10:44:53 -0000
@@ -1245,6 +1245,7 @@ set_mode (ECalBackend *backend, CalMode 
 {
 	ECalBackendExchange *cbex;
 	ECalBackendExchangePrivate *priv;
+	gboolean re_open = FALSE;
 	
 	cbex = E_CAL_BACKEND_EXCHANGE (backend);
 	priv = cbex->priv;
@@ -1257,7 +1258,10 @@ set_mode (ECalBackend *backend, CalMode 
 			cal_mode_to_corba (mode));
 	}
 
+
 	g_mutex_lock (priv->set_lock);	
+	if ((priv->mode == CAL_MODE_LOCAL) && (mode == CAL_MODE_REMOTE))
+		re_open = TRUE;
 
 	switch (mode) {
 	
@@ -1270,7 +1274,7 @@ set_mode (ECalBackend *backend, CalMode 
 			priv->mode = CAL_MODE_REMOTE;
 		
 			e_cal_backend_notify_readonly (backend, priv->read_only);
-			if (is_loaded (backend))
+			if (is_loaded (backend) && re_open)
 				e_cal_backend_notify_auth_required(backend);
 			break;
connector_crash.txt (text/plain, 16.7 KB)
Backtrace was generated from '/opt/gnome2/bin/evolution-2.6'

Using host libthread_db library "/lib/libthread_db.so.1".
[Thread debugging using libthread_db enabled]
[New Thread -1236019520 (LWP 28647)]
[New Thread -1503188064 (LWP 28974)]
[New Thread -1511580768 (LWP 28973)]
[New Thread -1528366176 (LWP 28716)]
[New Thread -1519973472 (LWP 28715)]
[New Thread -1502921824 (LWP 28698)]
[New Thread -1494135904 (LWP 28693)]
[New Thread -1485743200 (LWP 28692)]
[New Thread -1371874400 (LWP 28661)]
[New Thread -1363477600 (LWP 28660)]
[New Thread -1344865376 (LWP 28659)]
[New Thread -1361020000 (LWP 28650)]
[New Thread -1360938080 (LWP 28649)]
0xffffe410 in __kernel_vsyscall ()
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xb70b6f8b in __waitpid_nocancel () from /lib/libpthread.so.0
#2  0xb765ba3d in gnome_init_with_popt_table () from /opt/gnome/lib/libgnomeui-2.so.0
#3  <signal handler called>
#4  0xffffe410 in __kernel_vsyscall ()
#5  0xb6655870 in raise () from /lib/libc.so.6
#6  0xb6656f43 in abort () from /lib/libc.so.6
#7  0xb79a5019 in mono_handle_native_sigsegv () from /usr/lib/libmono.so.0
#8  0xb7965642 in mini_init () from /usr/lib/libmono.so.0
#9  <signal handler called>
#10 0xb6a69b9c in g_type_check_instance_cast () from /opt/gnome/lib/libgobject-2.0.so.0
#11 0xb78ab11a in reopen_with_auth (data=0x874d568) at e-cal.c:964
#12 0xb69dd0a1 in g_list_copy () from /opt/gnome/lib/libglib-2.0.so.0
#13 0xb69deabd in g_main_context_dispatch () from /opt/gnome/lib/libglib-2.0.so.0
#14 0xb69e1cbf in g_main_context_check () from /opt/gnome/lib/libglib-2.0.so.0
#15 0xb69e2069 in g_main_loop_run () from /opt/gnome/lib/libglib-2.0.so.0
#16 0xb7181b83 in bonobo_main () from /opt/gnome/lib/libbonobo-2.so.0
#17 0x08060aad in main (argc=1, argv=0xbf9b6c74) at main.c:610

Thread 13 (Thread -1360938080 (LWP 28649)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b6776 in __nanosleep_nocancel () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb7a5639e in _wapi_collection_init () from /usr/lib/libmono.so.0
No symbol table info available.
#3  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#4  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 12 (Thread -1361020000 (LWP 28650)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b37ec in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb7a58efa in _wapi_handle_dump () from /usr/lib/libmono.so.0
No symbol table info available.
#3  0xb7a5b355 in _wapi_handle_timedwait_signal_handle () from /usr/lib/libmono.so.0
No symbol table info available.
#4  0xb7a5b465 in _wapi_handle_wait_signal_handle () from /usr/lib/libmono.so.0
No symbol table info available.
#5  0xb7a69178 in WaitForSingleObjectEx () from /usr/lib/libmono.so.0
No symbol table info available.
#6  0xb7a04722 in mono_object_register_finalizer () from /usr/lib/libmono.so.0
No symbol table info available.
#7  0x00000404 in ?? ()
No symbol table info available.
#8  0xffffffff in ?? ()
No symbol table info available.
#9  0x00000001 in ?? ()
No symbol table info available.
#10 0xb7a1a3ac in mono_get_special_static_data () from /usr/lib/libmono.so.0
No symbol table info available.
#11 0xb7a1bd69 in ves_icall_System_Threading_Thread_Thread_internal () from /usr/lib/libmono.so.0
No symbol table info available.
#12 0xb7a68684 in _wapi_timed_thread_exit () from /usr/lib/libmono.so.0
No symbol table info available.
#13 0xb7a83117 in GC_start_routine () from /usr/lib/libmono.so.0
No symbol table info available.
#14 0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#15 0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 11 (Thread -1344865376 (LWP 28659)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b3576 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb77b0a25 in e_msgport_wait (mp=0x81f5240) at e-msgport.c:660
	__cancel_buf = {__cancel_jmp_buf = {{__cancel_jmp_buf = {-1215828964, 0, 4001536, -1344867288, 1512218995, 
        1116691427}, __mask_was_saved = 0}}, __pad = {0xafd6f490, 0x0, 0xb70b2bb0, 0xafd6f3c8}}
	__cancel_routine = (void (*)(void *)) 0xb77b0764 <msgport_cleanlock>
	__cancel_arg = (void *) 0x81f5240
	not_first_call = 0
	msg = (EMsg *) 0xafd6fba0
#3  0xb77b12ff in thread_dispatch (din=0x81f51e0) at e-msgport.c:1022
	e = (EThread *) 0x81f51e0
	m = (EMsg *) 0x0
	info = (struct _thread_info *) 0x8241078
	self = 2950101920
#4  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#5  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 10 (Thread -1363477600 (LWP 28660)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b3576 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb77b0a25 in e_msgport_wait (mp=0x81f5240) at e-msgport.c:660
	__cancel_buf = {__cancel_jmp_buf = {{__cancel_jmp_buf = {-1215828964, 0, 4001536, -1363479512, 1531879795, 
        1116691427}, __mask_was_saved = 0}}, __pad = {0xaebaf490, 0x0, 0xb70b2bb0, 0xaebaf3c8}}
	__cancel_routine = (void (*)(void *)) 0xb77b0764 <msgport_cleanlock>
	__cancel_arg = (void *) 0x81f5240
	not_first_call = 0
	msg = (EMsg *) 0xaebafba0
#3  0xb77b12ff in thread_dispatch (din=0x81f51e0) at e-msgport.c:1022
	e = (EThread *) 0x81f51e0
	m = (EMsg *) 0x0
	info = (struct _thread_info *) 0x824edd0
	self = 2931489696
#4  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#5  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 9 (Thread -1371874400 (LWP 28661)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b5f2b in __read_nocancel () from /lib/libpthread.so.0
No symbol table info available.
#2  0xaec09224 in do_read (marshal=0x8274738, buf=0x8239f50 "\b", len=4) at camel-stub-marshal.c:90
	nread = -1363098888
#3  0xaec09349 in marshal_read (marshal=0x8274738, buf=0xae3ad3e7 "\213\bÔ:®g\225À®8G'\b", len=1)
    at camel-stub-marshal.c:117
	avail = 0
	nread = -1371876312
#4  0xaec0949b in marshal_getc (marshal=0x8274738) at camel-stub-marshal.c:149
	buf = -117 '\213'
#5  0xaec09567 in decode_uint32 (marshal=0x8274738, dest=0xae3ad444) at camel-stub-marshal.c:177
	value = 0
	v = -1371876400
#6  0xaec0977f in camel_stub_marshal_decode_uint32 (marshal=0x8274738, dest=0xae3ad444) at camel-stub-marshal.c:262
No locals.
#7  0xaec09f84 in status_main (data=0x8274518) at camel-stub.c:109
	stub_object = (CamelObject *) 0x8274518
	stub = (CamelStub *) 0x8274518
	status_channel = (CamelStubMarshal *) 0x8274738
	retval = 11
#8  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#9  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 8 (Thread -1485743200 (LWP 28692)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b3576 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb77b0a25 in e_msgport_wait (mp=0x81f5240) at e-msgport.c:660
	__cancel_buf = {__cancel_jmp_buf = {{__cancel_jmp_buf = {-1215828964, 0, 4001536, -1485745112, 1384448371, 
        1116691427}, __mask_was_saved = 0}}, __pad = {0xa7715490, 0x0, 0xb70b2bb0, 0xa77153c8}}
	__cancel_routine = (void (*)(void *)) 0xb77b0764 <msgport_cleanlock>
	__cancel_arg = (void *) 0x81f5240
	not_first_call = 0
	msg = (EMsg *) 0xa7715ba0
#3  0xb77b12ff in thread_dispatch (din=0x81f51e0) at e-msgport.c:1022
	e = (EThread *) 0x81f51e0
	m = (EMsg *) 0x0
	info = (struct _thread_info *) 0x84c5490
	self = 2809224096
#4  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#5  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 7 (Thread -1494135904 (LWP 28693)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b3576 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb77b0a25 in e_msgport_wait (mp=0x81f5240) at e-msgport.c:660
	__cancel_buf = {__cancel_jmp_buf = {{__cancel_jmp_buf = {-1215828964, 0, 4001536, -1494137816, 1392841075, 
        1116691427}, __mask_was_saved = 0}}, __pad = {0xa6f14490, 0x0, 0xb70b2bb0, 0xa6f143c8}}
	__cancel_routine = (void (*)(void *)) 0xb77b0764 <msgport_cleanlock>
	__cancel_arg = (void *) 0x81f5240
	not_first_call = 0
	msg = (EMsg *) 0xa6f14ba0
#3  0xb77b12ff in thread_dispatch (din=0x81f51e0) at e-msgport.c:1022
	e = (EThread *) 0x81f51e0
	m = (EMsg *) 0x0
	info = (struct _thread_info *) 0x84c4d20
	self = 2800831392
#4  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#5  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 6 (Thread -1502921824 (LWP 28698)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb66e07b3 in poll () from /lib/libc.so.6
No symbol table info available.
#2  0xb69e1cf3 in g_main_context_check () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#3  0xb69e2069 in g_main_loop_run () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#4  0xb7102f10 in link_set_io_thread () from /opt/gnome/lib/libORBit-2.so.0
No symbol table info available.
#5  0xb69fc89f in g_thread_create_full () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#6  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#7  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 5 (Thread -1519973472 (LWP 28715)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b3576 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb77b0a25 in e_msgport_wait (mp=0x81f5100) at e-msgport.c:660
	__cancel_buf = {__cancel_jmp_buf = {{__cancel_jmp_buf = {-1215828964, 0, 4001536, -1519975384, 1351831923, 
        1116691427}, __mask_was_saved = 0}}, __pad = {0xa5670490, 0x0, 0xb70b2bb0, 0xa56703c8}}
	__cancel_routine = (void (*)(void *)) 0xb77b0764 <msgport_cleanlock>
	__cancel_arg = (void *) 0x81f5100
	not_first_call = 0
	msg = (EMsg *) 0x81f3190
#3  0xb77b12ff in thread_dispatch (din=0x81f50a0) at e-msgport.c:1022
	e = (EThread *) 0x81f50a0
	m = (EMsg *) 0x0
	info = (struct _thread_info *) 0x0
	self = 2774993824
#4  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#5  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 4 (Thread -1528366176 (LWP 28716)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b3576 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb77b0a25 in e_msgport_wait (mp=0x81f5190) at e-msgport.c:660
	__cancel_buf = {__cancel_jmp_buf = {{__cancel_jmp_buf = {-1215828964, 0, 4001536, -1528368088, 1360175475, 
        1116691427}, __mask_was_saved = 0}}, __pad = {0xa4e6f490, 0x0, 0xb70b2bb0, 0xa4e6f3c8}}
	__cancel_routine = (void (*)(void *)) 0xb77b0764 <msgport_cleanlock>
	__cancel_arg = (void *) 0x81f5190
	not_first_call = 0
	msg = (EMsg *) 0x81f51c0
#3  0xb77b12ff in thread_dispatch (din=0x81f5130) at e-msgport.c:1022
	e = (EThread *) 0x81f5130
	m = (EMsg *) 0x0
	info = (struct _thread_info *) 0x0
	self = 2766601120
#4  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#5  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 3 (Thread -1511580768 (LWP 28973)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b3576 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb69c6ba2 in g_async_queue_lock () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#3  0xb69fe4e2 in g_thread_pool_push () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#4  0xb69fc89f in g_thread_create_full () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#5  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#6  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 2 (Thread -1503188064 (LWP 28974)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b3576 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb69c6ba2 in g_async_queue_lock () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#3  0xb69fe4e2 in g_thread_pool_push () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#4  0xb69fc89f in g_thread_create_full () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#5  0xb70b03bb in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#6  0xb66e998e in clone () from /lib/libc.so.6
No symbol table info available.

Thread 1 (Thread -1236019520 (LWP 28647)):
#0  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1  0xb70b6f8b in __waitpid_nocancel () from /lib/libpthread.so.0
No symbol table info available.
#2  0xb765ba3d in gnome_init_with_popt_table () from /opt/gnome/lib/libgnomeui-2.so.0
No symbol table info available.
#3  <signal handler called>
No symbol table info available.
#4  0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#5  0xb6655870 in raise () from /lib/libc.so.6
No symbol table info available.
#6  0xb6656f43 in abort () from /lib/libc.so.6
No symbol table info available.
#7  0xb79a5019 in mono_handle_native_sigsegv () from /usr/lib/libmono.so.0
No symbol table info available.
#8  0xb7965642 in mini_init () from /usr/lib/libmono.so.0
No symbol table info available.
#9  <signal handler called>
No symbol table info available.
#10 0xb6a69b9c in g_type_check_instance_cast () from /opt/gnome/lib/libgobject-2.0.so.0
No symbol table info available.
#11 0xb78ab11a in reopen_with_auth (data=0x874d568) at e-cal.c:964
	status = 134784436
#12 0xb69dd0a1 in g_list_copy () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#13 0xb69deabd in g_main_context_dispatch () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#14 0xb69e1cbf in g_main_context_check () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#15 0xb69e2069 in g_main_loop_run () from /opt/gnome/lib/libglib-2.0.so.0
No symbol table info available.
#16 0xb7181b83 in bonobo_main () from /opt/gnome/lib/libbonobo-2.so.0
No symbol table info available.
#17 0x08060aad in main (argc=1, argv=0xbf9b6c74) at main.c:610
	options = {{longName = 0x80654a9 "component", shortName = 99 'c', argInfo = 1, arg = 0x8067860, val = 0, 
    descrip = 0x80654b4 "Start Evolution activating the specified component", argDescrip = 0x0}, {
    longName = 0x80654e7 "offline", shortName = 0 '\0', argInfo = 0, arg = 0x806784c, val = 0, 
    descrip = 0x80654ef "Start in offline mode", argDescrip = 0x0}, {longName = 0x8065505 "online", shortName = 0 '\0', 
    argInfo = 0, arg = 0x8067848, val = 0, descrip = 0x806550c "Start in online mode", argDescrip = 0x0}, {
    longName = 0x8065521 "force-shutdown", shortName = 0 '\0', argInfo = 0, arg = 0x8067854, val = 0, 
    descrip = 0x8065530 "Forcibly shut down all Evolution components", argDescrip = 0x0}, {
    longName = 0x806555c "force-migrate", shortName = 0 '\0', argInfo = 0, arg = 0x8067858, val = 0, 
    descrip = 0x806556c "Forcibly re-migrate from Evolution 1.4", argDescrip = 0x0}, {longName = 0x8065593 "debug", 
    shortName = 0 '\0', argInfo = 1, arg = 0x8067864, val = 0, 
    descrip = 0x806559c "Send the debugging output of all components to a file.", argDescrip = 0x0}, {
    longName = 0x80655d3 "disable-eplugin", shortName = 0 '\0', argInfo = 0, arg = 0x806785c, val = 0, 
    descrip = 0x80655e4 "Disable loading of any plugins.", argDescrip = 0x0}, {longName = 0x8065604 "setup-only", 
    shortName = 0 '\0', argInfo = 1073741824, arg = 0x8067850, val = 0, descrip = 0x0, argDescrip = 0x0}, {longName = 0x0, 
    shortName = 0 '\0', argInfo = 0, arg = 0x0, val = 0, descrip = 0x0, argDescrip = 0x0}}
	client = (GConfClient *) 0x8095000
	skip_warning_dialog = 1
	uri_list = (GSList *) 0x0
	popt_context_value = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, 
      v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, 
      v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
	program = (GnomeProgram *) 0x806efa8
	popt_context = (poptContext) 0x8071f38
	args = (const char **) 0x0
	icon_list = (GList *) 0x806e848
	filename = 0xb6749c80 ""
#0  0xffffe410 in __kernel_vsyscall ()
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.